2010-10-29 5 views
7

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

У меня есть иерархическая таксономия, работая над всеми элементами с отношениями «многие ко многим», теперь все записи отсортированы по этим категориям, и все работает нормально. Теперь, какое использование является каталогом, если нет опции поиска?

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

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

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

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

Ссылки на интересные статьи также оценены!

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

спасибо :)

+1

P.S. Я готов дать щедрость за лучший ответ. – kovshenin

ответ

4

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

Таксономия:

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

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

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

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

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

Отличная книга: Lucene in Action (2nd edition)

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

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

Что вам в принципе нужно сделать, это boost your title field, поэтому оно становится более актуальным. Вы также можете указать change the scoring mechanism, чтобы присвоить более высокие баллы для документов, имеющих дополнительную информацию.

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

1

Lucene или Solr выполнит эту работу. Solr построен на основе люцена, see here for more info

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

Загляните в Dewfy и Matthijs Bierman, ответьте на некоторые полезные моменты.

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

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

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

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

Чтобы отобразить глубоко вложенное дерево категорий, вам нужно будет создать это дерево в памяти и подать solr со специальным импортом. Для этого у нас есть рабочее приложение. Вы можете использовать our approach

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

2

Я попытаюсь добавить к тонким ответам Маттиса, Дьюфи и Каруселла. В основном, вы пытаетесь улучшить релевантность поиска. Предлагаю вам прочитать Debugging Search Application Relevance Issues Гранта Ингерсолла и его Optimizing Findability in Lucene and Solr, а также его Practical Relevance slides.

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

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