2

我正在使用 solrj API 来查询我的 SOLR 3.6 索引。我有多个文本字段,我想对它们进行不同的加权。根据我的阅读,我应该能够使用 dismax 或 edismax 查询类型来做到这一点。我尝试了以下方法:

SolrQuery query = new SolrQuery();
query.setQuery( "title:apples oranges content:apples oranges");
query.setQueryType("edismax");
query.set("qf", "title^10.0 content^1.0");
QueryResponse rsp = m_Server.query( query );

但这不起作用。我尝试了以下变体来设置查询类型,但似乎没有什么不同。

query.setQueryType("dismax");
query.set("qt","dismax");
query.set("type","edismax");
query.set("qt","edismax");
query.set("type","dismax");

我想保留完整的 Lucene 查询语法,所以我更喜欢 ExtendedDisMax 而不是 DisMax。提升查询中的单个术语(如下所示)确实有效,但不是有效的解决方案,因为查询是自动生成的,并且语法可能会变得任意复杂。

query.setQuery( "title:apples^10.0 oranges^10.0 content:apples oranges");

任何帮助将非常感激。

4

2 回答 2

7

最好的方法是在你的 solrconfig.xml 中定义一个请求处理程序,比如 -

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

并使用 qt 参数来定义请求处理程序 -

query.set("qt","search");

您可以通过更改 solr config xml 配置并重新加载内核来微调 boost 配置。

于 2012-04-26T06:03:32.217 回答
3

您应该能够以编程方式执行此操作。

如果您定义了处理程序:

<requestHandler name="dismax_nl" class="solr.SearchHandler"> <lst name="defaults"> <str name="defType">dismax</str> 

和下面的代码

solrQuery.put("defType", "dismax"); 
solrQuery.put("qf", "comments_nl^20 id^1 name_nl^1 description_nl^0.2 url_nl^0.5 text^0.1"); 

保持您的查询简单。qf 定义(加权)字段。您还应该能够在上面的示例中设置 qt=dismax_nl 而不是 deftype=dismax (这可能更好,但我展示的那个是我知道有效的东西)

于 2012-05-04T12:40:53.303 回答