solr几种查询方式

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

   }

  }

 }

你可能感兴趣的:(Lucene,Solr)