2016-11-04 65 views
0

有人可以帮助将下面的solr查询转换为java?如何在java中为多个子查询编写solr查询?

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

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

回答

0

我只是在查询中所做的小修改,使其更简单

Q =(类别:$ Q1^2.0马努:$ Q1^2.0)& DEFTYPE = edismax & Q1 =星系&重量= CSV & FL = MANU时,类别

创建Solrclient对象

字符串urlString =“http://server:port/solr/core“;

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

创建SolrQuery对象和该对象上执行这样,还可以设置各种参数

query.set( “Q”, “类别:星系和Manu:星系”)的查询方法;

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

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

+0

谢谢,它的工作。 :) –

+0

很高兴知道;) –

+0

我添加了一个更多的编辑问题@Aman Tandon你能帮忙吗? –