Sunspot - повышает записи, где совпадения происходят в начале текста - PullRequest
4 голосов
/ 01 февраля 2012

Например, допустим, в моей БД есть запись с текстом "Hormel Corporation", а мой поисковый запрос выглядит как "Hormel Corned Beef 16 Ounces". Поскольку моя текущая конфигурация остается в силе, лучшими результатами будут другие записи, даже если я ищу "Hormel Corporation". Я думаю, что решение моей проблемы состояло бы в том, чтобы отдать приоритет записям, где совпадение встречается раньше всего в поисковом запросе. Я прочитал все документы, но мне было трудно понять, как это может работать.

У меня есть только одно поле - имя. Это поле имени для записи, которую я хочу, гласит "Hormel Corporation", однако, когда я ищу "Hormel Corned Beef 16 Ounces", лучшим результатом является то, что не ISNT "Hormel Corporation", но что-то, на первый взгляд, случайное, а запись я ищет 3-го или 4-го в результатах.

Большое спасибо!

Ответы [ 2 ]

5 голосов
/ 02 февраля 2012

У меня была похожая проблема, чтобы решить. Поэтому я сохранил свои данные во многих полях:

title
keywords (upto 10 words)
abstract (a paragraph)
text (as long as you like)

Для запросов я использовал анализатор запросов dismax над полями с разными весами:

title^20
keywords^20
abstract^12
text^1

Так что, если вы

  1. хорошо определите свою схему данных
  2. используйте dismax
  3. определить весовые коэффициенты для ваших запросов

когда вы будете искать "Hormel Corned Beef 16 Ounces", результат, название которого "Hormel Corp", будет лучше оценен в документе, тело которого содержит "... Для блюда мы рекомендуем банку Hormel Corned Beef 16 Ounces. .. "


Редактировать комментарии ОП.

Факт ФП таков: при названии n слов первые n слов имеют значение , чем остальные.

Я предлагаю модель данных, в которой есть два поля: title_first_words и title. Клиентское приложение (извините, вы не можете напрямую использовать DIH) должно будет извлечь первые n слов из заголовка для сохранения в title_first_words, а полный заголовок будет сохранен в title.

Для поиска вы можете передать весь запрос анализатору dismax. Парсер запросов имеет тенденцию к title_first_words как title_first_words^4 title^1. Таким образом, первые n слов будут иметь большее значение для данного поиска.

0 голосов
/ 01 февраля 2012

Вы пытались повысить значение каждого слова в поисковом запросе, например:

Hormel^100 Corned^20 Beef^5 16^2 Ounces^1
...