Методы поиска Рекомендации - PullRequest
7 голосов
/ 29 октября 2010

Это скорее вопрос теории, а не практики.Я работаю над проектом, который представляет собой довольно простой каталог ссылок.Вся модель аналогична каталогу Dmoz или Yahoo, за исключением того, что каждая запись имеет определенные дополнительные атрибуты.

У меня есть иерархическая таксономия , работающая со всеми записями, имеющими отношение многие ко многим, всеЗаписи теперь сортируются по этим категориям, и все, кажется, работает нормально.Теперь, какой смысл использовать каталог, если нет опции поиска?

Вот немного подробнее о моих моделях: у каждой записи есть заголовок, описание, URL и несколько социальных профилей: YouTube, Twitter, Flickr и др.пара других.К каждой записи может быть прикреплен логотип и скрытое поле для тегов.Также название и описание хранятся на трех разных языках.Поэтому в основном я хотел бы, чтобы результаты поиска были:

  1. Соответствующие (включая таксономию)
  2. Возможно те с логотипами
  3. Возможно те с 100% заполненных профилей

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

Так что мой вопрос - есть ли какие-нибудь книги, методики или даже другиеПоисковые системы (если Сфинкс и Люсен недостаточно хороши) , что бы вы порекомендовали по этому вопросу ?Я не только хотел бы получить полный контроль над результатами поиска и их рейтингом, но и предоставить своим посетителям правильную и актуальную информацию.

Также приветствуются ссылки на интересные статьи!

И Нет , я не пытаюсь перестроить Google:)

Спасибо :))

Ответы [ 4 ]

5 голосов
/ 29 октября 2010

Отличная книга: Lucene in Action (2-е издание)

Когда мы начали с Lucene, у нас было первое издание, оно действительно шаг за шагом проведет вас через все, что вам нужно.Настоятельно рекомендуется.2-е издание обновлено до последней и самой большой версии (3.xx).

Алгоритм Tf-Idf очень хорошо работает с большими текстами, но если у вас есть записьПодобно структуре, это может иметь неприятные последствия: документы с несколькими терминами считаются более «релевантными», чем документы с несколькими терминами.С Lucene вы заставите его работать, но вам придется испачкать руки.

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

Получайте удовольствие.Если вы не можете понять это, есть отличная поддержка в Lucene mailinglist .

4 голосов
/ 29 октября 2010

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

Таксономия:

  • Категория представлена ​​в виде целочисленного ключа в дБ, поэтому у каждого документа есть несколько экземпляров поля 'CATEGORY' типа Number. Например, документ: [1,2,5,10, «Колесо»] - означает, что колесо принадлежит к каждой категории.

Не доступные для поиска поля (логотипы, социальный профиль):

  • Конечно, вы можете хранить не доступные для поиска значения в неиндексированных полях Lucene. Но мы сохранили всю информацию о продукте в БД, чтобы избежать перестройки индекса Lucene. Таким образом, Lucene владеет только идентификатором продукта и индексированными, но сохраненными значениями для ключевых полей.

Три языка и несколько полей:

  • У нас есть только 2 языка. Таким образом, разные названия продуктов могут храниться в одном и том же документе Lucene и относиться к одному идентификатору продукта (как я пишу до того, как идентификатор относится к БД). Это позволяет вам искать продукт, даже если пользовательский запрос использует смесь языков.
  • Очевидно, что заголовок, теги и описание имеют различный вес для результата поиска. Lucene обрабатывает это, назначая вес поля.
2 голосов
/ 02 ноября 2010

Я постараюсь добавить к прекрасным ответам Маттиса, Девфи и Каруссела.По сути, вы пытаетесь улучшить релевантность поиска.Я предлагаю вам прочитать Grant Ingersoll * Вопросы по релевантности приложений для поиска и его Оптимизация поиска в Lucene и Solr , а также Практические слайды по релевантности .

Для разных языков и для огранки я предлагаю вам использовать Solr .Это поисковая система, созданная с использованием Lucene, которая проста в использовании.Он может поддерживать несколько языков, используя разные Solr Core для каждого языка.

1 голос
/ 29 октября 2010

Люсьен или Солр сделают эту работу. Solr построен поверх люцена, см. Здесь для получения дополнительной информации

Я бы пошел с Solr. скачать + настройка это легко и быстро. Начните с учебника и моей коллекции ссылок . Соответствие должно быть хорошо с Solr и легко настраивается.

Посмотрите, как Дьюфи и Маттис Биерман ответят на некоторые хорошие вопросы.

Затем выберите обработчик запроса dismax, и вы можете предпочесть документы с определенными свойствами.

например. для процента от полного профиля вы определяете отдельное поле profile_completness, затем вы можете добавить profile_completeness в bf (boostfunction) обработчика dismax: чем полнее профиль, тем больше будет увеличено количество этих документов.

Я упоминал ранее, что вы можете легко настроить релевантность: например, Вы можете настроить BF для STH. как: bf=title^10 tags^5 profile_completeness^1

«Возможно, с логотипами» можно решить с помощью буст-запросов: bq=logo:[* TO *]^1. Где logo:[* TO *] означает «только документы, содержащие логотип поля»

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

Если вам нужна дополнительная помощь, не стесняйтесь комментировать.

...