solr几种查询方式
public static void queryDataTemp() {
List<Map<String, Object>> returnList = new ArrayList<Map<String, Object>>();
//方式一
/*SolrQuery query = new SolrQuery();
query.setQuery("residence_addr:人口 owner_name:房屋");//注意中间是空格
*/
//方式二
/*SolrQuery query = new SolrQuery();
query.setQuery("residence_addr:人口 OR owner_name:房屋");//注意中间是大写OR
*/
//方式三
// SolrQuery query = new SolrQuery("residence_addr:111 OR owner_name:房屋");
//方式四 注意,以下方式,必须要开启edismax解析器
SolrQuery query = new SolrQuery("人口房屋");
query.setParam("qf", "residence_addr owner_name");
query.setParam("defType", "edismax");//查询handler的类型,即查询解析器,如果要使用权重排序,至少要用dismax解析器,edismax还可以使用bf,即函数
//query.setParam("q.op", "OR"); //默认是OR
//query.addField("*, score"); // 使得solr查询得到每一条查询的分数.
try {
QueryResponse resp = solrServer.query(query);
SolrDocumentList docList = resp.getResults();
for(SolrDocument doc : docList) {
Collection<String> fieldNameList = doc.getFieldNames();
TreeMap<String, Object> result = new TreeMap<String, Object>();
int index = 100;
for(String fieldName : fieldNameList) {
result.put((index++) + "-" + fieldName, doc.get(fieldName));
}
returnList.add(result);
}
} catch (SolrServerException e) {
e.printStackTrace();
} finally {
query.clear();
}
for(Map<String, Object> map : returnList) {
Iterator<Entry<String, Object>> it = map.entrySet().iterator();
while(it.hasNext()) {
Entry<String, Object> e = it.next();
System.out.println(e.getKey() + ":" + e.getValue());
}
}
}