Solrj3.4的使用

来源:互联网 发布:windows net snmp安装 编辑:程序博客网 时间:2024/06/06 00:41

前言

其实Solr3.4提供基于restful接口的服务,所以client使用任何语言都可以,但用client的访问方式可以提升开发效率。Solr官方推荐的客户端是Java写的solrj3.4和solr包中自带的ruby写的solr-ruby客户端。Solr-ruby的完善性我没查,直接用了solrj3.4。solrj的文档并不多,且很碎(solrj跟solr的文档都在http://wiki.apache.org,wiki的方式,且solr版本超多)。这里记录一些我用到的solrj的接口,备忘。

-------------------------------------------------------------------------------------------------------------------------------------------------------------

如何使用Solrj3.4连接solr服务器

Solrj3.4中,SolrServer作为solr服务器的抽象,ta是一个抽象类;更普遍的是使用CommonsHttpSolrServer对象作为solr服务器的实例,构建ta时需要传递两个参数,一个是solr服务器的url根地址,一个是new出来的HttpClient对象(在apache common包中)。实例代码如下:

    HttpClient client = new HttpClient();    SolrServer solrServer = new CommonsHttpSolrServer("http://localhost:8983/solr", client);

如何使solrj3.4支持搜索结果高亮

  • solr开关高亮的参数是hl,设为true表示返回结果带有高亮信息,设为false则没有,如果不指定,则默认是false;
  • 高亮的域由hl.fl来指定,可指定用英文逗号分割的field名称,比如对content和title做高亮,就需要设置hl.fl=content,title;
  • (更多的高亮参数可参见:http://wiki.apache.org/solr/HighlightingParameters)

在solr3.4中,高亮的参数是通过在SolrQuery对象中设置属性值来实现的,实例代码如下(摘自http://wiki.apache.org/solr/Solrj,有删减):

    SolrQuery query = new SolrQuery();    query.setQuery("foo");    query.setParam("hl.fl", "content,title");    query.setParam("hl.mergeContiguous", "true");    QueryResponse queryResponse = getSolrServer().query(query);

参数获取高亮结果的实例代码如下(这段代码我需要实际测试下):

    Iterator<SolrDocument> iter = queryResponse.getResults().iterator();    while (iter.hasNext()) {      SolrDocument resultDoc = iter.next();      String content = (String) resultDoc.getFieldValue("content");      String id = (String) resultDoc.getFieldValue("id"); //id is the uniqueKey field      if (queryResponse.getHighlighting().get(id) != null) {        List<String> highlightSnippets = queryResponse.getHighlighting().get(id).get("content");      }    }

如何使用做复杂查询

对于这样的需求:“搜索出一定包含key1,且至少包含key2、key3、key4中一个的结果”。就需要用到solr的复杂查询了。我没细看solrj的语法,不过尝试了下这样写是满足需求的:key1 AND (key2 OR key3 OR key4)

原创粉丝点击