#solr #solr4
#solr #solr4
Вопрос:
- Документ 1: product_name:виджет, model_number: abc123
- Документ 2: product_name:виджет, model_number:def456
- Документ 3: product_name:виджет, model_number: ghi789
Предположим, мы используем edismax, и наш пользователь ошибается, вводя номер своей модели и вводит виджет abc12x в поле поиска. Мы сопоставляем все три документа по product_name, но ни одного по model_number, хотя у нас есть близкое совпадение для документа 1.
Каков наилучший способ справиться с этой ситуацией, чтобы мы могли сообщить пользователю, что их model_number не был точным совпадением, но что документ 1, вероятно, то, что они искали? Очевидно, что нечеткий поиск (abc12x ~) элегантно справится с этим, но мы не знаем заранее, что это потребуется, и мы не хотим использовать его волей-неволей только для того, чтобы в конечном итоге снизить релевантность поиска, производительность и т. Д.
Вероятно, основной вопрос, но новый для Solr. Спасибо.
Ответ №1:
Ваш индекс станет намного больше, но N-граммы — хороший способ получить частичные совпадения. Для вашего сценария будет работать реберная N-грамма.
Ответ №2:
Вы можете добавить модификаторы близости символов к терминам, чтобы справиться с этим во время запроса:
q={!edismax}widget~3 abc12x~3
Это позволит найти термины в индексе в пределах «расстояния редактирования» от предоставленных условий поиска. Преимущество этого также заключается в сопоставлении термина запроса ‘acb123’ с термином индекса ‘abc123’. Вставка или удаление символа — это одно редактирование, замена двух символов — это два редактирования.