Solr - 如果在特殊字段中找到查询,则提升结果

时间:2011-11-02 13:44:08

标签: solr field edismax

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

让我解释一下:

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

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

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

在我的schema.xml中。字段文字是我的defaultSearchField。

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

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

最诚挚的问候 托拜厄斯

2 个答案:

答案 0 :(得分:1)

没有fieldname:term语法use可以定义请求处理程序 -

<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的简单查询。

如果仅通过网址,则可以提升特定字段的匹配,例如@ link

e.g。

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>

答案 1 :(得分:0)

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)&wt=json&debugQuery=on

在调试模式下显示

  

&#34; parsedquery_toString&#34;:&#34; +((姓名:alex((姓名:pandian)^ 50.0)))()&#34;

它只是从第二个词提升条款。在这种情况下,只有Pandian被提升,但Alex不是。