Манипулировать баллом / рангом по результатам запроса из NHibernate.Search - PullRequest
0 голосов
/ 25 марта 2010

Я работаю с NHibernate, NHibernate.Search и Lucene.Net, чтобы улучшить поисковую систему, используемую на разрабатываемом мной веб-сайте.

По сути, я использую его для поиска содержимого документов спецификации корпорации.Это не следует путать с понятием документов Lucene: в моем случае документ спецификации (который в дальнейшем я буду называть «specdoc») может содержать много страниц, и содержимое этих страниц фактически индексируется (таким образом, сами страницы попадают в концепцию документов Lucene).Таким образом, страницы принадлежат specdoc, которые, в свою очередь, принадлежат корпорации (то есть у корпорации может быть много specdocs).Я использую атрибуты «IndexEmbedded» и «ContainedIn» NHibernate.Search, чтобы связать страницы с их specdoc и specdocs с их корпорациями, поэтому я могу запрашивать термины на страницах specdoc, и Lucene / NH.Search возвращает либо сами страницы, specdocs или корпорации, которые соответствуют запросу на страницах.Я могу запросить этот способ и получить ранжированные результаты, таким образом представляя результаты (то есть корпорации, спецдокументы или страницы) по релевантности, и это здорово.

Но теперь мне нужно нечто большее.В частности, в случае, когда я запрашиваю термины и получаю NH.Search, возвращаем корпорации, которые соответствуют, мне нужно вручную / искусственно настроить счет некоторых результатов, потому что есть корпорации, которые я хочу показать в верхней части результатаset - подумайте о «спонсируемых результатах».

Я подумываю сделать это в своем приложении, возможно, создать таблицу сущностей / баз данных, которая будет содержать связь с сущностью корпорации и значение повышения оценки.Но я не знаю, как передать это в Lucene и сделать так, чтобы он соответственно повышал результаты во время поиска.Изначально я думал о создании класса Similarity для этого, но похоже, что Similarity не может быть использовано для изменения наборов результатов во время поиска.Что касается этой страницы , похоже, мне нужно возиться с весом или выигрышем.Но документы немного поверхностны, потому что нет примеров того, как реализовать пользовательский скоринг, не говоря уже о том, чтобы интегрировать его с NH.Search.

Итак, кто-нибудь знает, как это сделать, или указывает мненекоторая документация или рабочий пример того, как сделать что-то подобное?

Спасибо!

1 Ответ

0 голосов
/ 27 марта 2010

Из того, что я понимаю, вы просто хотите иметь возможность устанавливать повышение во время запроса, а не во время индекса. Это можно сделать легко. Когда вы строите свой запрос, вы можете установить повышение тогда. Объект Query содержит свойство SetBoost, которое позволяет повысить документы, соответствующие всему запросу. Это полезно, когда вы используете два запроса по терминам и хотите, чтобы один из них был увеличен. Но если вы используете что-то наподобие QueryParser для построения ваших запросов, то синтаксический анализатор запросов может задать усиление для терминов. Подробнее об этом здесь http://lucene.apache.org/java/2_9_0/queryparsersyntax.html#Boosting%20a%20Term. Теперь, если вы используете синтаксический анализатор запросов, вы можете использовать некоторое регулярное выражение или скорректировать строку синтаксического анализатора запросов, добавив дополнительный символ для увеличения термина, или вы можете посмотреть на создание собственного запроса. синтаксический анализатор, который добавит повышение, когда решит, что должен быть добавлен. Я создал свой собственный анализатор запросов, и это не так сложно. Вот некоторая информация об этом http://openedu.ossreleasefeed.com/tutorials/apache-lucene-extending-the-queryparser/

...