Как построить поиск с огранкой по неизвестному / неуказанному набору атрибутов / свойств?

Я работаю над системой поиска продуктов с большим набором неопределенных продуктов, который постоянно растет. Каждый продукт имеет разные атрибуты, и в настоящее время они сохраняются в массиве пар ключ-значение в виде строки:

"attributes": [
                    {
                        "key": "Producttype",
                        "value": "Headphones - 3.5 mm plug"
                    },
                    {
                        "key": "Weight",
                        "value": "280 g"
                    },
                    {
                        "key": "Soundmode",
                        "value": "Stereo"
                    },
                    ....
                ]

У каждого товара есть и категория. Я использую asticsearch 2.4.x для сохранения данных, по которым я хочу искать через spring-data -asticsearch. При необходимости возможно обновление до новейшей версии asticsearch.

Как видите, атрибуты действительно общие. Также необходимо использовать вложенные объекты для возможности поиска по этим атрибутам. Я также думаю о предварительной обработке этих атрибутов в стандартизированном формате. Например, ключ "Вес" может быть написан в разных формах, таких как "Вес продукта" или "Вес продукта". Поскольку есть много атрибутов, и я не хотел бы создавать собственное свойство / поле для каждого, о котором я думал, чтобы сопоставить только важные (например, вес) с настраиваемым, собственным полем и сопоставить другие атрибуты, как описано выше.

Теперь, если кто-то ищет, например, "iphone", я хотел бы показать некоторые фасетки слева от страницы результатов поиска. Фасеты должны отличаться, если кто-то ищет "обувь Adidas". Возможно ли это с указанным выше форматом, используя вложенные объекты? Можно ли динамически строить фасеты в зависимости от того, какой набор результатов возвращает эластичный поиск? Например, наиболее общие свойства, которые содержатся во всех конечных продуктах, должны использоваться для создания фасетов. Или мне нужно сохранить некоторые предопределенные фильтры / фасеты в каждой категории? Я думаю, что это будет слишком много работы, а также не работает на результаты поиска, где продукты могут иметь разные категории. Какова лучшая практика для создания функции поиска с фацетированием для сущностей с n различными свойствами, которые могут расти в будущем?

0 ответов

Другие вопросы по тегам