Я работаю с NHibernate, NHibernate.Search и Lucene.Net для улучшения поисковой системы, используемой на веб-сайте, который я разрабатываю.Манипулировать оценку/ранг по результатам запроса от NHibernate.Поиск
В основном, я использую его для поиска содержимого документов спецификации корпораций. Это не следует путать с понятием документа Lucene: в моем случае документ спецификации (который я буду называть «specdoc») может содержать много страниц, а содержание этих страниц - это те, которые фактически индексированы (таким образом, сами страницы являются теми, которые попадают в концепцию документов Луцены). Таким образом, страницы принадлежат specdoc, которые, в свою очередь, принадлежат корпорации (так, корпорация может иметь много specdocs). Я использую NHibernate.Search «IndexEmbedded» и «ContainedIn» атрибуты для связывания страниц с их specdoc и specdocs с их корпорациями, поэтому я могу запросить термины на страницах specdoc и вернуть Lucene/NH.Search либо сами страницы , specdocs или корпораций, которые соответствуют запросу на страницах. Я могу запросить этот способ и получить ранжированные результаты, таким образом представляя результаты (то есть корпорации, specdocs или страницы) по релевантности, что отлично.
Но теперь мне нужно что-то еще. В частности, в случае, когда я запрашиваю условия и возвращаю NH.Search корпорации, которые соответствуют, мне нужно вручную/искусственно настроить оценку некоторых результатов, потому что есть корпорации, которые я хочу показать вверху результата set - подумайте о «спонсированных результатах».
Я собираюсь сделать это в своем приложении, возможно, создав таблицу сущностей/баз данных, которая содержит ассоциацию с сущностью корпорации и значение повышения балла. Но я не знаю, как передать это Lucene и поднять его результаты в поисковое время. Первоначально я думал о получении класса сходства для этого, но не похоже, что сходство можно использовать для изменения наборов результатов во время поиска. Согласно this page, похоже, что мне нужно, чтобы возиться с весом или скорингом. Но документы немного поверхностны, поскольку нет примеров того, как реализовать собственный счет, а тем более интегрировать его с NH.Search.
Итак, кто-нибудь знает, как это сделать, или укажите мне какую-нибудь документацию или рабочий пример о том, как сделать что-то подобное?
Спасибо!
Да, я подумал о том, чтобы настроить запрос, чтобы получить результаты, которые мне нужны, но я не мог этого сделать, по крайней мере, я не знаю, как это сделать. Вот сделка: я храню/индексирую, а также текстовое содержимое страниц specdoc, идентификаторы спецификаций и корпораций, связанные с контентом. Так что, если я запрашиваю что-то вроде этого: SpecDoc.Pages.content: белый и SpecDoc.CorpID: 32 возвращает корпорации с specdoc страницы, содержащие «белый» в содержании, исключительно от корпорации с ID 32. –
сейчас , экстраполируя это, это приблизится к поведению, которое мне нужно: SpecDoc.Pages.content: white OR SpecDoc.CorpID: 64^100 - Но это явно не совсем то, что мне нужно: это принесет результаты от корпораций с идентификатором 64, увеличившись до 100 баллов, даже если их страницы не содержат «белых». –
Что мне нужно, это повышение баллов на CorpID, если их страницы содержат «белый», в противном случае они не должны отображаться на результатах вообще. Теперь либо мое понимание синтаксиса запросов Lucene отсутствует (моя ссылка уже была на странице, которую вы опубликовали), либо мне нужно что-то еще. У меня нет времени, чтобы прочитать ваше сообщение в блоге с вниманием, поэтому я рассмотрю его позже и посмотрю, полезно ли это. Благодаря! –