【问题标题】:Solr - Boosting result if query is found in a special fieldSolr - 如果在特殊字段中找到查询,则提升结果
【发布时间】:2011-11-02 13:44:08
【问题描述】:

我想知道如果在不使用“fieldname:query”-syntax 的特殊字段中找到查询,Solr 3.4 是否可以提升搜索结果。

让我解释一下:

我的索引中有几个字段。其中之一被命名为“缩写”,并填充了诸如 AVZ、JSP、DECT 等文本......

为了能够在纯粹搜索“AVZ”时找到结果,我添加了一个

<copyField source="abbreviation" dest="text"/>

在我的 schema.xml 中。 text 字段是我的默认搜索字段。

在我看来,这不是最好的解决方案。所以我试图找出,如果可以在所有字段中搜索“AVZ”,并且如果在字段缩写中找到字符串,则结果条目应该被提升(增加分数),以便它将被列出在结果列表中的第一个条目。与使用 abbreviation:AVZ AVZ 作为查询相同。

我能想到的另一种可能性是分析查询。如果找到像“AVZ”这样的子字符串,查询将附加 abbreviation:AVZ。但在这种情况下,我必须能够找出哪些缩写被索引。是否可以使用 SolrJ 从 Solr 索引中检索字段的所有可能项?

最好的问候 托比亚斯

【问题讨论】:

    标签: solr field edismax


    【解决方案1】:

    没有 fieldname:term 语法使用可以定义一个请求处理程序 -

    <requestHandler name="search" class="solr.SearchHandler" default="true">
     <lst name="defaults">
       <str name="echoParams">explicit</str>
       <str name="defType">dismax</str>
       <str name="qf">
          abbreviation^2 text
       </str>
       <str name="q.alt">*:*</str>
       <str name="rows">10</str>
       <str name="fl">*,score</str>
     </lst>
    </requestHandler>
    

    这使用 dismax 查询解析器。您也可以使用 edismax。
    这将提升结果,查询将是一个简单的查询,如 q=AVZ。

    如果仅通过 url,您可以提升特定字段的匹配度,如提到的 @link

    例如

    q=abbreviation:AVZ^2 text:AVZ
    

    这将通过匹配缩写来提升结果,这将导致文档出现在顶部。

    使用 *:* 查询无法通过 dismax 获得所有结果。
    但是,对于所有文档,不要传递任何 q 参数。 q.alt=*:* 将返回所有文档。

    否则,请将defType 更新为edismax。

    <requestHandler name="search" class="solr.SearchHandler" default="true">
     <lst name="defaults">
       <str name="echoParams">explicit</str>
       <str name="defType">edismax</str>
       <str name="qf">
          abbreviation^2 text
       </str>
       <str name="q.alt">*:*</str>
       <str name="rows">10</str>
       <str name="fl">*,score</str>
     </lst>
    </requestHandler>
    

    【讨论】:

    • 感谢您的回答。这是否意味着,Solr 只需在请求处理程序中添加 qf-config 即可同时在文本和缩写字段中自动搜索?
    • 是的,qf 决定了要查询的字段。因此它们都会被搜索,并且随着缩写的权重较高,这些结果将得到提升。
    • 好的,我很清楚。你能解释一下,为什么查询 q=*:* 在上述请求处理程序配置下没有返回任何结果?
    • 用更多细节更新了答案。对于 dismax 只是不传递任何 q 参数 q.alt 会处理它。
    • 感谢您的更新。最后一个问题:以上配置搜索所有字段,配置在qf中。但是如何设置像 q=AVZ AND doctype:FOOBAR 这样的过滤器?
    【解决方案2】:

    Apache Solr 6.4.2:

    提升精确词组搜索不起作用: Solrconfig.xml:

    明确的

      <int name="rows">10</int>
      <str name="defType">edismax</str>
    
      <str name="qf">names^50</str>
    
    
    
      <!-- <str name="df">text</str> -->
    </lst>
    

    用于测试的 Solr 查询: q=(names:alex%20pandian)&amp;wt=json&amp;debugQuery=on

    在调试模式下显示

    "parsedquery_toString":"+((names:alex ((names:pandian)^50.0))) ()"

    它仅从第二个单词中提升术语。在这种情况下,只有 Pandian 得到了提升,而 Alex 没有。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      • 2016-11-04
      • 2014-04-07
      相关资源
      最近更新 更多