我一直在使用 NHibernate、NHibernate.Search 和 Lucene.Net 来改进我开发的网站上使用的搜索引擎。
基本上,我用它来搜索公司规范文件的内容。不要将这与 Lucene 的文档概念混淆:在我的例子中,一个规范文档(我将在下文中称为“规范文档”)可以包含许多页面,而这些页面的内容是实际被索引的内容(因此,页面本身就是属于 Lucene 的文档概念的页面)。因此,这些页面属于一个规范文档,而规范文档又属于一个公司(因此,一个公司可以有许多规范文档)。我正在使用 NHibernate.Search "IndexEmbedded" 和 "ContainedIn" 属性将页面与其规范文档和规范文档关联到他们的公司,因此我可以在规范文档页面中查询术语并让 Lucene/NH.Search 返回页面本身,规范文档,或与页面上的查询匹配的公司。我可以通过这种方式查询并获得排名结果,从而按相关性呈现结果(即公司、规范文档或页面),这很棒。
但现在我需要更多的东西。特别是在我查询术语并让 NH.Search 返回匹配的公司的情况下,我需要手动/人为调整某些结果的分数,因为有些公司我想显示在结果的顶部设置 - 想想“赞助结果”。
我正在考虑在我的应用程序上执行此操作,可能会创建一个实体/数据库表,其中包含与公司实体的关联以及分数提升值。但我不知道如何将它提供给 Lucene 并让它在搜索时相应地提升结果。最初我考虑派生一个相似性类来执行此操作,但看起来相似性不能用于在搜索时修改结果集。根据这个页面,看起来我需要的是搞砸体重或得分。但是文档有点肤浅,因为没有关于如何实现自定义评分的示例,更不用说将其与 NH.Search 集成了。
那么,有谁知道如何做到这一点,或者向我指出一些关于如何做类似事情的文档或工作示例?
谢谢!