Search服务支持多语言访问,并且完全兼容开源Apache Solr API,本篇主要介绍如何使用Solr Java API访问Search服务。

背景信息

1、获取集群连接地址

在Search实例控制台,点击进入数据库连接后,查看客户端访问地址,参见下图

注意:此处的外网地址暂时不支持访问,如果需要外网访问Search服务,可钉钉联系云HBase答疑。

2、配置客户端SDK依赖Search服务完全兼容开源Solr协议,可直接依赖开源客户端版本。

<dependency>
  <groupId>org.apache.solr</groupId>
  <artifactId>solr-solrj</artifactId>
  <version>7.7.3</version>
</dependency>

3、代码示例

下面给出一个简单的代码样例:首先通过查询索引获取id,再转换为HBase表的rowkey,最后通过查询HBase取出最终完整原数据。

  • 3.1 查询索引

    /**
    //公网访问时,本地调试采用HttpSolrClient模式
    //前提:通过控制台"访问控制"添加本机IP到白名单
    String httpUrl = "http://***:8983/solr/"
    HttpSolrClient solrClient = new HttpSolrClient.Builder(httpUrl).build();
    **/
    // 内网访问采用CloudSolrClient模式
    String zkHost = "ld-****-m1-se-proxy-zk.hbaseue.rds.aliyuncs.com:2181/solr";
    CloudSolrClient solrClient = new CloudSolrClient.Builder(Collections.singletonList(zkHost), Optional.empty()).build(); //CloudSolrClient是线程安全的,应用多线程可以共享一个对象
    SolrQuery solrQuery = new SolrQuery("name_s:bobo AND age_i:18");
    QueryResponse response = solrClient.query("your_index_name", solrQuery);
    SolrDocumentList documentList = response.getResults();
    long hitCount = documentList.getNumFound();  // 查询条件命中的数据条数
    for(SolrDocument doc : documentList) {    // 查询条件命中的结果
     String id = (String)doc.getFieldValue("id");
     //do something
    }
    solrClient.close();

    更多样例代码,参考

  • 3.2 id转换成rowkey

    默认的id为String类型,id转成rowkey过程如下:

    // String id = "xxxx";
    org.apache.hadoop.hbase.util.Bytes.toBytes(docId)
  • 3.3 获取最终数据

拿到匹配条件的rowkey后,只要进行HBase的get操作即可。可以通过Java API原生方式,详见参考,也可以通过thrift支持c#、python、go等多语言, 详见参考