使用Solrj在SOLR中增强字段

Joe*_*Joe 2 lucene search solr solrj

我正在使用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 );
Run Code Online (Sandbox Code Playgroud)

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

query.setQueryType("dismax");
query.set("qt","dismax");
query.set("type","edismax");
query.set("qt","edismax");
query.set("type","dismax");
Run Code Online (Sandbox Code Playgroud)

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

query.setQuery( "title:apples^10.0 oranges^10.0 content:apples oranges");
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激.

Jay*_*dra 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>
Run Code Online (Sandbox Code Playgroud)

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

query.set("qt","search");
Run Code Online (Sandbox Code Playgroud)

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