使用Solrj在SOLR中增强字段

时间:2012-04-25 22:57:15

标签: search solr lucene 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 );

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

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");

非常感谢任何帮助。

2 个答案:

答案 0 :(得分: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配置。

答案 1 :(得分: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(这可能会更好,但我所展示的是我所知道的有效的东西)