操纵NHibernate.Search查询结果的分数/排名

操纵NHibernate.Search查询结果的分数/排名,nhibernate,lucene.net,nhibernate.search,Nhibernate,Lucene.net,Nhibernate.search,我一直在与NHibernate、NHibernate.Search和Lucene.Net合作,以改进我开发的网站上使用的搜索引擎 基本上,我使用它来搜索公司规范文档的内容。这不能与Lucene的文档概念混淆:在我的例子中,一个规范文档(我以后称之为specdoc)可以包含许多页面,这些页面的内容实际上是索引的页面,因此页面本身就是属于Lucene文档概念的页面。因此,这些页面属于一个specdoc,而specdoc又属于一个公司,因此,一个公司可以有许多specdoc。我正在使用NHiberna

我一直在与NHibernate、NHibernate.Search和Lucene.Net合作,以改进我开发的网站上使用的搜索引擎

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

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

我正在考虑在我的应用程序上这样做,可能创建一个实体/数据库表,其中包含与公司实体的关联和分数提升值。但我不知道如何将这个信息反馈给Lucene,并让它在搜索时相应地提高搜索结果。起初,我想通过派生一个相似性类来实现这一点,但看起来相似性不能在搜索时用于修改结果集。据报道,看起来我需要的是在体重和得分上乱搞。但是这些文档有点肤浅,因为没有关于如何实现自定义评分的示例,更不用说将其与NH.Search集成

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


谢谢

据我所知,您只希望能够在查询时而不是索引时设置提升。这很容易做到。在构建查询时,可以设置boost。查询对象包含一个SetBoost属性,该属性允许您提升与整个查询匹配的文档。当您使用两个术语查询并且希望其中一个得到增强时,这非常有用。但是,如果您使用QueryParser之类的工具来构建查询,那么查询解析器有一个语法来为这些术语设置提升。更多关于这方面的信息。现在,如果您使用的是查询解析器,那么您可以使用一些正则表达式或调整查询解析器字符串来添加额外的符号来增强一个术语,或者您可以考虑创建自己的查询解析器,当它决定必须添加时,它将添加增强。我创建了自己的查询解析器,因为它并不难。这里有一些关于这方面的信息

是的,我考虑过调整查询以获得我需要的结果,但我不能这样做,至少我不知道怎么做。交易如下:我存储/索引specdoc页面的文本内容、specdoc的ID以及与内容相关的公司。因此,如果我查询这样的内容:SpecDoc.Pages.content:white和SpecDoc.CorpID:32,它会返回SpecDoc页面内容中包含白色的公司,完全来自ID为32的公司。现在,从中推断,这将接近我需要的行为:SpecDoc.Pages.content:white或SpecDoc.CorpID:64^100-但这显然不是我需要的:它将带来ID为64的公司的结果,提高到100分,即使他们的页面不包含白色。我需要的是,只有当他们的页面包含白色时,才能在CorpID上增加分数,否则,他们不应该出现在结果中。现在要么我对Lucene查询语法的理解不够,要么我的参考已经是你发布的页面了,要么我需要其他东西。我还没来得及专心阅读你的博客文章,所以我以后会仔细研究一下,看看它是否有用。谢谢