【问题标题】:Struggling with a solr query and relevance挣扎于 solr 查询和相关性
【发布时间】:2013-02-28 04:15:54
【问题描述】:

我在使用 Solr 时遇到了提升问题。我们最近从 Lucene 切换到了 Solr。

我们有 4 个(主要)搜索字段供我们搜索:本质、关键字、allSearchable 和质量;其中,对于索引中的每个文档,essential 包含关键字中的前 3 个非停用词。 “关键字”只是关键字列表。 'allSearchable' 保存的数据只是给定文档的其他数据的集合。我们在 lucene 中所做的是对用户在搜索框中键入的任何给定搜索进行 3 次搜索(以便按相关性对搜索结果进行排名),如下所示:

在搜索框中输入的单词:tree

查询 1:+essence:tree(按“质量”排序) 如果查询 1 返回的页面足够我们想要获取的页面,则返回。

查询 2:+keywords:tree(按“质量”排序) 如果查询 1 和查询 2 的组合为我们所在的页面返回了足够的结果,则返回结果。

查询 3:+allSearchable:tree(按“质量”排序) 返回结果。如果没有,那就倒霉了。

我的问题是分页。我以前不必将分页(startIndex,行)发送到 Lucene。我可以要求所有内容,然后翻转我返回的所有内容,收集足够的结果以返回,具体取决于我要求的页面。使用 Solr,我必须传递分页参数。我们的索引中有超过 800 万个文档,因此要获取与“树”之类的查询匹配的所有内容太昂贵了。问题是,如果我在查询 1 中请求第 3 页,但我没有得到足够的结果,那么我必须继续查询 2(关键字:树)。但这不对,因为我要求查询 2 的第 3 页结果(换句话说,给我所有与第 3 页的“关键字:树”匹配的文档)。但这并不是我真正想问的问题。如果本质不匹配任何内容,我只想询问关键字的第 1 页。等等。

我真正要找的是一个查询,它足以满足我之前所做的这三个查询,这样我首先得到本质匹配,其次是关键字匹配,最后是 allSearchable 匹配。

我尝试对这个查询使用提升:essence:tree^4.0 keywords:tree^2.0 allSearchable:tree^1.0

但这似乎不起作用,我不知道为什么?我拿出了各种东西,但事情仍然没有给我正确的结果。我正在使用默认的 StandardRequestHandler(它似乎使用 LuceneQueryParser(不是 dismax 或 edismax)。我可以看到提升正在发送到 URL 中的 solr(我通过在我的 requestHandler 的默认部分添加一个 qf 参数来使用提升) solrconfig.xml)。我当然知道 lucene 可以理解这些参数。谁能告诉我如何构造一个查询,让我得到我想要的结果,如上所述?enter code here

【问题讨论】:

    标签: sorting solr lucene solr-boost


    【解决方案1】:

    我建议使用ExtendedDismax Query Parser (eDisMax),然后您可以指定跨字段的提升,如下例所示:

    http://localhost:8983/solr/select/?q=tree
      &defType=edismax&qf=essence^4.0+keywords^2.0+allSearchable^1.0
    

    您可能需要在字段中向上或向下调整提升值以获得所需的结果。此外,eDisMax 还有其他影响提升的参数以及您应该检查的查询执行方式。

    【讨论】:

    • 谢谢。我不知道是否可以提出后续问题,所以如果我不在网上,请打我。问题:我可以将 lucene 查询(以 +searchField:searchValue 的形式)发送到 edismax 吗?
    • 是的,根据查询语法部分(来自上面的链接),它支持完整的 LuceneQuerySyntax,包括字段搜索。
    • 好的。我的单元测试也证实了这一点。我所做的只是运行大量不同的查询,将 defType 更改为 edismax,并且所有测试都通过了。谢谢佩奇!
    猜你喜欢
    • 2021-07-28
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 2023-04-06
    • 2014-08-30
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    相关资源
    最近更新 更多