【问题标题】:Lucene term boosting with sunspot-rails使用 sunspot-rails 提升 Lucene 术语
【发布时间】:2010-11-15 16:59:04
【问题描述】:

我遇到了 Lucene 的 Term [Boosting][1] 查询语法的问题,特别是在 Ruby on Rails 中通过 sunspot_rails gem。这样您就可以在查询期间指定特定术语的权重,并且与特定字段的权重无关。

sunspot 生成的 HTML 查询使用 qf 参数指定要按照配置搜索的字段,以及查询本身的 q 参数。当插入符号添加到搜索词以指定提升(即 q=searchterm^5)时,它不会返回任何结果,即使返回的结果会没有提升词。

另一方面,如果我手动创建 HTTP 查询并手动指定要搜索的字段 (q=title_texts:searchterm^5),则会返回结果并且分数似乎会受到提升的影响。

简而言之,查询词提升似乎无法与 qf 指定的字段一起使用。

我的应用程序要求跨多个字段进行搜索,使用与这些字段相关联的相应提升,有条件地依次使用查询的单个字词提升。

有什么见解吗?

[1]:http://lucene.apache.org/java/2_9_1/queryparsersyntax.html#Boosting 一个术语

【问题讨论】:

    标签: ruby-on-rails lucene solr sunspot


    【解决方案1】:

    Sunspot 使用 dismax 解析器进行全文搜索,它避开了通常的 Lucene 查询语法,转而采用有限的(但用户输入友好的)查询语法结合一组可以构造的附加参数(例如 qf)由客户端应用程序调整搜索的工作方式。 Sunspot 使用全文 DSL 中的boost_fields 方法支持逐字段提升:

    http://outoftime.github.com/sunspot/docs/classes/Sunspot/DSL/Fulltext.html#M000129

    【讨论】:

    • 谢谢,我现在看到 dismax 是 Lucene 查询语法的一个子集。不幸的是,我需要提升查询中的术语,而不是文档的字段。是否有其他查询解析器允许跨字段进行查询?
    • 您可以多次使用全文块,对每个字段中的不同字段执行查询,以不同方式进行提升等——这是否适合您的用例?
    • 我没有意识到太阳黑子只支持dismax。感谢这两个响应,但我再次需要能够指定每个字段的提升,以及传入查询的任意术语。后者似乎需要指定单个字段名称,并且 lucene 解析器超过 dismax。
    【解决方案2】:

    我找到的解决方案是使用 DisMax,但在 bq 参数中添加一个带有提升项的布尔字符串。

    【讨论】:

      猜你喜欢
      • 2012-02-11
      • 2011-09-28
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      相关资源
      最近更新 更多