Solrj3.4的使用

前言

其实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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值