我正在使用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");
非常感谢任何帮助。
答案 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(这可能会更好,但我所展示的是我所知道的有效的东西)