【问题标题】:Manipulate score/rank on query results from NHibernate.Search操纵 NHibernate.Search 查询结果的分数/排名
【发布时间】:2010-03-27 20:40:03
【问题描述】:

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

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

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

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

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

谢谢!

【问题讨论】:

    标签: nhibernate lucene.net nhibernate.search


    【解决方案1】:

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

    【讨论】:

    • 是的,我想过调整查询以获得我需要的结果,但我不能那样做,至少我不知道怎么做。这是交易:我存储/索引,连同规范文档页面的文本内容、规范文档的 ID 和与内容相关的公司。因此,如果我查询这样的内容:SpecDoc.Pages.content:white AND SpecDoc.CorpID:32 它会返回带有包含“white”的内容的规范文档页面的公司,专门来自 ID 为 32 的公司。
    • 现在,据此推断,这将接近我需要的行为:SpecDoc.Pages.content:white OR SpecDoc.CorpID:64^100 - 但这显然不是我所需要的:它会带来来自 ID 为 64 的公司的结果,提高到 100 分,即使他们的页面不包含“白色”。
    • 我需要的是 CorpID 上的分数提升,只有当他们的页面包含“白色”时才会发生,否则,他们根本不应该出现在结果中。现在要么我缺乏对 Lucene 查询语法的理解(我的参考已经是您发布的页面),要么我需要其他东西。我还没有时间仔细阅读您的博客文章,所以我稍后会研究一下,看看它是否有用。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多