全部产品

Java API访问

更新时间:2020-08-04 11:41:14

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

1、获取集群连接地址

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

solr_zk_address

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

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

  1. <dependency>
  2. <groupId>org.apache.solr</groupId>
  3. <artifactId>solr-solrj</artifactId>
  4. <version>7.7.3</version>
  5. </dependency>

3、代码示例

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

索引访问流程

  • 3.1 查询索引

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

    更多样例代码,参考

  • 3.2 id转换成rowkey

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

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

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