2015-03-20 2 views
2

Я создаю индивидуальный веб-сайт для электронной коммерции и используя SOLR (4.8.1) для индексирования/поиска продуктов.Предложения по запросу Solr

Я хочу, чтобы обеспечить поле поиска с автозаполнением, чтобы помочь пользователям, побуждая предложения, так как они печатают:

  • Показать предложения по поиску (термины/фразе) [Top 5]
  • Показать предметы предложения [верх 5]

Так же, как в этом примере (взято из www.extra.com.br)

enter image description here

Вторая часть (продукты предложения) легко, в основном просто запрашивая Solr как обычный поиск будет делать и принимать топ 5.

Первая часть (запросы) предложения, что держит меня спать по ночам :)

Я уже пробовал несколько вариантов, как Suggester компонента (/ предложить), а также пытается регулярный поиск (/ выбор) с гранями.

Я достиг, чтобы получить предложения для отдельных слов, но то, что я ДЕЙСТВИТЕЛЬНО ХОЧУ, является прогностическими предложениями, такими как печать выше. Если пользователь вводит «monit», он приносит предложения запросов/продуктов на основе продуктов, которые действительно существуют. Например, если пользователь набирает «монитор банана», он ничего не должен приносить (потому что он не существует), но в моем случае он предлагает «мониторный банан», потому что 2 слова существуют отдельно в индексе. (даже не имея отношения между ними)

Может ли кто-нибудь указать мне в правильном направлении, чтобы выполнить это? Было бы очень полезно оценить учебник с примером (или даже книгой).

Чтобы пояснить, что мне нужно, что именно предложил Google Commerce Search (я думаю, что они прекратили его): https://www.youtube.com/watch?v=nje9fUcIkKc

Спасибо!

ответ

1

Спасибо @frances за ваш ответ.

мне удалось добиться того, что мне было нужно (вроде), выполнив:

  • Создано новое ядро ​​под названием «предложения»;
  • создал новую хранимую процедуру для заполнения ядра с комбинациями предложений, такие как: модели, категория + модель, модели + категория, производитель + модель + категория, и так далее

  • создал новую конечную точку (действие) в моем веб-приложении, которое выполняет 2 внутренних HTTP-запроса к SOLR, являясь первым в ядре «предложения», а второе - обычным ядром поиска продуктов.

  • Сгруппированные результаты в одном формате JSON ответ для возврата к автозаполнения Javascript компонент (я использую этот один: https://www.devbridge.com/sourcery/components/jquery-autocomplete/)

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

печати ниже:

enter image description here

1

Предлагаемые поисковые запросы могут быть популярны в прошлых поисковых запросах (но только те, которые возвращают результаты) или набор предложенных администратором запросов или статистически сгенерированных комбинаций терминов, которые будут возвращать результаты. (Или, возможно, комбинация.) Но так или иначе вам придется придумать список поисков, которые могут быть предложены. Список может включать или не включать рейтинги (наиболее популярные или важные поисковые запросы с наибольшим рейтингом).

Я бы взял этот список и ввел его в Solr как набор документов, полностью отделенных от ваших записей о товарах. Вы можете поместить их в одно ядро ​​Solr (и соответствующим образом фильтровать поиск) или в свое собственное ядро. И вы хотите убедиться, что строки поиска индексируются так же, как важные текстовые поля в ваших записях продукта. (Похоже, вы будете использовать много индексирования n-граммов, если ваш автозаполк будет работать, как включенный вами скриншот.) Если ваши поисковые запросы оцениваются, я бы использовал эти рейтинги, чтобы обеспечить повышение уровня записи на индивидуальном поиск записей.

Теперь, если поиск и продукты находятся в двух отдельных ядрах, вы будете выполнять два автозаполнения для всех типов пользователей. Если они находятся в одном и том же ядре Solr, вы можете теоретически получить максимальные удары для обоих сразу используя Result Grouping.Для этого вам нужно будет иметь поле типа записи, которое закодировано как multiValued="false", но в противном случае настроено так, как если бы было поле фасета (то есть indexed="true" stored="true"). Если это поле имеет только два возможных значения (продукт и поиск, возможно?), То вы можете получить верхние хиты для каждой «группы» с запросом, как:

http://localhost:8080/solr/core0/search?group=true& 
         group.field=recordType&group.limit=5&q=monit 

Это даст вам лучшие 5 поисков и топ 5 продуктов соответствия «Monit». У вас неизбежно будет режим поиска, в котором вы не хотите предлагать поисковые запросы. В этот момент вы можете отказаться от поиска предложений поиска, выполнив отфильтрованный запрос вместо сгруппированного.

http://localhost:8080/solr/core0/search?fq=recordType:product&q=tv monitor 

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

Смежные вопросы