0

我一直在使用 NHibernate、NHibernate.Search 和 Lucene.Net 来改进我开发的网站上使用的搜索引擎。

基本上,我用它来搜索公司规范文件的内容。不要将这与 Lucene 的文档概念混淆:在我的例子中,一个规范文档(我将在下文中称为“规范文档”)可以包含许多页面,而这些页面的内容是实际被索引的内容(因此,页面本身就是属于 Lucene 的文档概念的页面)。因此,这些页面属于一个规范文档,而规范文档又属于一个公司(因此,一个公司可以有许多规范文档)。我正在使用 NHibernate.Search "IndexEmbedded" 和 "ContainedIn" 属性将页面与其规范文档和规范文档关联到他们的公司,因此我可以在规范文档页面中查询术语并让 Lucene/NH.Search 返回页面本身,规范文档,或与页面上的查询匹配的公司。我可以通过这种方式查询并获得排名结果,从而按相关性呈现结果(即公司、规范文档或页面),这很棒。

但现在我需要更多的东西。特别是在我查询术语并让 NH.Search 返回匹配的公司的情况下,我需要手动/人为调整某些结果的分数,因为有些公司我想显示在结果的顶部设置 - 想想“赞助结果”。

我正在考虑在我的应用程序上执行此操作,可能会创建一个实体/数据库表,其中包含与公司实体的关联以及分数提升值。但我不知道如何将它提供给 Lucene 并让它在搜索时相应地提升结果。最初我考虑派生一个相似性类来执行此操作,但看起来相似性不能用于在搜索时修改结果集。根据这个页面,看起来我需要的是搞砸体重或得分。但是文档有点肤浅,因为没有关于如何实现自定义评分的示例,更不用说将其与 NH.Search 集成了。

那么,有谁知道如何做到这一点,或者向我指出一些关于如何做类似事情的文档或工作示例?

谢谢!

4

1 回答 1

0

据我了解,您只想能够在查询时设置提升,而不是索引时间。这可以很容易地完成。当您构建查询时,您可以设置提升。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/的一些信息

于 2010-03-27T12:40:03.667 回答