1

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

让我解释:

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

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

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

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

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

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

最好的问候托比亚斯

4

2 回答 2

2

如果没有 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=*:*将返回所有文档。

否则,更新defTypeedismax.

<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>
于 2011-11-02T15:00:01.333 回答
1

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

在调试模式下它显示

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

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

于 2017-04-11T12:47:08.613 回答