我想知道如果在不使用“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索引中检索字段的所有可能术语?
最诚挚的问候 托拜厄斯
答案 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不是。