Поиск Solr: Поиск по нескольким полям с помощью поиска «И» - PullRequest
0 голосов
/ 24 февраля 2020

Я владелец продукта для поисковой системы компании, занимающейся электронной коммерцией, и в настоящее время я "открываю для себя" Solr - поскольку я никогда раньше не работал с этим механизмом. Извините заранее, если я не использую правильную терминологию.

У меня есть следующий типичный случай использования: пользователь ищет «Apple iPhone». Набор данных содержит поля, такие как Бренд = Apple, Название продукта = iPhone, Тип продукта = Смартфон, Категория = Смартфоны и т. Д. c.

В наших текущих настройках и в соответствии с нашими внешними консультантами двигатель обеспечивает все результаты, содержащие либо яблоко ИЛИ iPhone 8. Чтобы сначала получить все айфоны Apple в качестве результатов, они рекомендуют создать новое индексированное свойство, содержащее бренд, название продукта, тип продукта и категорию, в одном и заменить отдельные свойства. (так Бренд, Название продукта, и т. д. c.) этим новым. По их словам, Solr не может обеспечить поиск AND («искать все продукты, в которых есть яблоко AND iPhone в их наборе данных»).

Это правильно, и вы бы справились с этим вариантом использования? Точно так же?

Я довольно скептически отношусь к тому, что Solr не может искать Apple iPhone в отдельных свойствах, а затем выдавать результаты, которые содержат оба термина в обоих индексированных свойствах. Изменения, которые они рекомендуют, также означают, что мы теряем гранулярность, так как несколько полей объединяются в одно. Это также означает, что мы больше не сможем повысить каждое свойство отдельно, так как они заменяются новыми.

Я знаю, что мой запрос может встретиться как вопрос "newb ie", но как Я не смог понять это, и консультанты, похоже, действительно думают, что это единственный способ справиться с этим вариантом использования.

Спасибо всем за вашу помощь!

1 Ответ

0 голосов
/ 24 февраля 2020

Нет причин терять гранулярность; обычно вам нужно скопировать поля (используя инструкцию copyField) в одно или несколько полей для поддержки различных типов запросов (это также позволяет оценивать попадания в разные поля с разными весами). Таким образом, вы сохраняете все свои исходные поля, и у вас есть новое отдельное поле, в котором все содержимое является одним полем поиска.

В зависимости от варианта использования запроса может потребоваться не более edismax обработчик запросов и qf=Brand ProductName ProductType для запроса этих полей, и установите q.op=AND (или mm=<factor>), чтобы получить желаемое поведение. Если вы не можете сопоставить поля, используя qf, используйте поле, в которое скопированы различные поля в качестве базового соответствия (т. Е. Добавьте SearchField в качестве последнего поля в qf, как показано выше), затем увеличьте хиты в бренд / имя / et c. соответственно, точные совпадения только для «яблока» оцениваются выше.

То, что считается совпадением, будет зависеть от токенизации и фильтрации, происходящей для поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...