如何在java中为多个子查询编写solr查询?

时间:2016-11-04 08:20:38

标签: java solr

有人可以帮助将以下solr查询转换为java吗?

http://<server>/solr/<core>/select?debugQuery=on&indent=on&q=(_query_:"{!edismax mm='100%25' qf='manu^2.0' v=$q1}") 
AND (_query_:"{!edismax mm='100%25' qf='category^2.0' v=$q1}")&q1=galaxy&wt=csv

我需要知道如何将多个子查询设置为查询。

编辑2:为了获得准确的回复,我查询了3次,直到收到回复。

query.setQuery("manu:"+prefix+" AND category:"+prefix);
        QueryResponse response = server.query(query);
        if (response.getResults().getNumFound() == 0) {
            query.setQuery("manu:"+prefix+" OR category:"+prefix);
            response = server.query(query);
            if (response.getResults().getNumFound() == 0) {
                query.setQuery("text:"+prefix);
                response = server.query(query);
            }    
        }

但它造成了太多延迟?有没有更好的方法?

1 个答案:

答案 0 :(得分:0)

我只是对您的查询进行了一些修改,以使其更简单

  

q =(类别:$ q1 ^ 2.0 AND manu:$ q1 ^ 2.0)&amp; defType = edismax&amp; q1 = galaxy&amp; wt = csv&amp; fl = manu,category

创建Solrclient对象

  

String urlString =“http://server:port/solr/core”;

     

SolrClient solrClient = new HttpSolrClient.Builder(urlString).build();

创建SolrQuery对象,并在该对象上执行这样的查询方法,并设置各种参数

  

query.set(“q”,“category:galaxy AND manu:galaxy”);

     

query.set(“qt”,“/ search”);

     

query.set(“mm”,“100%”);

     

query.setQueryType( “edismax”);

     

query.set(“qf”,“category ^ 2.0 manu ^ 2.0”);

     

QueryResponse response = solrClient.query(query);

您将获得SolrDocumentList列表,您可以在其上迭代并获得结果。

  

SolrDocumentList list = response.getResults();

请根据您使用的solr版本参考SolrJ Documentation