Sunspot Boost записывает, где совпадения встречаются в начале текста

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

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

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


person D-Nice    schedule 01.02.2012    source источник


Ответы (2)


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

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. использовать дисмакс
  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 слов окажут большее влияние на данный поиск.

person Jesvin Jose    schedule 02.02.2012
comment
Это имеет смысл, но в моей базе данных хранится только значение Hormel Corporation. Термин Hormel Corned Beef 16 Ounces не будет храниться в моей базе данных, когда пользователь будет его искать. Но я хотел бы сопоставить это с Hormel Corporation. Проблема в том, что, казалось бы, несвязанные записи появляются перед Hormel Corporation в результатах. - person D-Nice; 02.02.2012
comment
Я отредактировал последнее предложение, чтобы сделать его более понятным. Это не должно было означать, что запросы будут храниться где-либо :-) Я занимаюсь, казалось бы, несвязанными записями, пожалуйста, укажите все, что мне нужно для дальнейшего уточнения. - person Jesvin Jose; 02.02.2012
comment
Ну, я думаю, что мой вопрос, возможно, был недостаточно ясен. У меня есть только одно поле - имя. В этом поле имени для записи, которую я хочу, написано Hormel Corporation, однако, когда я ищу Hormel Corned Beef 16 Ounces, я выдаю лучшие результаты, которые не являются Hormel Corporation, но что-то вроде случайного, в то время как запись, которую я ищу, 3-я или 4 место по результатам. - person D-Nice; 02.02.2012
comment
Не могли бы вы опубликовать некоторые из «случайных» результатов, которые появляются вверху? - person nikhil500; 07.02.2012

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

Hormel^100 Corned^20 Beef^5 16^2 Ounces^1
person Fuxi    schedule 01.02.2012
comment
Нет, я не знал, что это допустимый синтаксис. Каждое ли слово во фразе должно иметь значение повышения? - person D-Nice; 02.02.2012
comment
у меня не получилось с этим - person D-Nice; 02.02.2012