Solr edismax — точное совпадение против нечеткого

#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’. Вставка или удаление символа — это одно редактирование, замена двух символов — это два редактирования.