阿里云hbase solr 全文搜索引擎使用篇

hbase 对应 solr 索引创建

阿里云索引创建链接
这里只是我使用时的例子

hbase创建一个表

先进入hbase shell
例如:创建一个t_order表,列族(cf)为b

create  't_order',{NAME=>'b',  REPLICATION_SCOPE=> '1'}

// REPLICATION_SCOPE=>'1',代表这个表插入数据时,hbase会通过索引订阅配置文件
// 往solr插入对应索引字段的数据

t_order 拥有字段

orderId 订单号(注意这个字段不能为id,id这个字段为hbase的rowkey)
customerId 用户id
customerMobile 用户手机
payTotalPrice 实际支付金额

solr 环境准备

下载阿里云的solr包版本

wget http://public-hbase.oss-cn-hangzhou.aliyuncs.com/installpackage/solr-7.3.1-ali-1.0.tgz

tar -zxvf solr-7.3.1-ali-1.0.tgz

Solr的zk地址见Solr服务开通控制台界面。
修改solr-7.3.1-ali-1.0/bin/solr.in.sh文件,去掉ZK_HOST前面注释“#”,并修改如下:

ZK_HOST=zk1:2181,zk2:2181,zk3:2181/solr

solr 创建索引的schema

下载solr-7.3.1-ali-1.0.tgz解压后

cd solr-7.3.1-ali-1.0/server/solr/configsets/_democonfig

修改 solr managed-schema文件,设置对应t_order_collection字段、类型、是否排序、是否多个值、是否必须

vim conf/managed-schema 

- 下面是添加主要的几个字段
    <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
    <field name="orderId" type="plong" indexed="true" stored="true" required="true" multiValued="false" />
    <field name="customerId" type="plong" indexed="true" stored="true" required="true" multiValued="false" />
    <field name="customerMobile" type="string" indexed="true" stored="true" required="true" multiValued="false" />
    <field name="payTotalPrice" type="pdouble" indexed="true" stored="true" required="true" multiValued="false" />

1. 其中id不能修改,这个为solr索引,并且为hbase 的 rowkey,所以这个主表的id用其他名字代替吧,这里使用orderId
2. 另外的字段才是需要索引的字段
3. 每一个字段必须跟下面索引的字段一致

上传到zookeeper中

cd solr-7.3.1-ali-1.0
./bin/solr zk upconfig -d ./server/solr/configsets/_democonfig -n t_order_schema

操作zookeeper简单用法

Zookeeper operation (one of 'upconfig', 'downconfig', 'rm', 'mv', 'cp', 'ls', 'mkroot') is required!

  Usage: solr zk upconfig|downconfig -d <confdir> -n <configName> [-z zkHost]
         solr zk cp [-r] <src> <dest> [-z zkHost]
         solr zk rm [-r] <path> [-z zkHost]
         solr zk mv <src> <dest> [-z zkHost]
         solr zk ls [-r] <path> [-z zkHost]
         solr zk mkroot <path> [-z zkHost]

solr 创建索引

t_order_collection

// 方法1,可以使用solrUI来创建
// 方法2,调用solr api 创建

solr 创建订阅索引

例如:创建一个t_order_index
配置文件 t_order_index.xml

<?xml version="1.0"?>
<indexer table="t_order">
    <field name="orderId" value="b:id" type="long"/>
    <field name="customerId" value="b:customerId" type="long"/>
    <field name="customerMobile" value="b:customerMobile" type="string"/>
    <field name="payTotalPrice" value="b:payTotalPrice" type="double"/>
    <param name="update_version_l" value="true"/>
</indexer>

创建索引

./bin/solr-indexer add  -n t_order_index  -f ./collection/t_order_conf.xml  -c t_order_collection

./bin/solr-indexer update  -n t_order_index  -f ./collection/t_order_conf.xml  -c t_order_collection

操作数据

操作hbase往t_order表中插入数据,solr的数据就会自动插入。更新数据同样会触发更新

相关问题

重新创建索引

删除了一个索引后,需要同时删除hbase中的indexer元信息

查询indexer元信息

hbase(main):005:0* list_peers
 PEER_ID CLUSTER_KEY ENDPOINT_CLASSNAME STATE REPLICATE_ALL NAMESPACES TABLE_CFS BANDWIDTH
 Indexer_t_order_index master1-1,master2-1,master3-1:2181:/ali-indexer/sep/hbase-slave/Indexer_t_order_index  ENABLED true   0
1 row(s)
Took 0.3851 seconds
=> #<Java::JavaUtil::ArrayList:0xda22aa>

删除indexer元信息

如果当indexer元信息不删除,会对应不上新创建的索引订阅

remove_peer 'Indexer_t_order_index'

然后重新按第一步重来一次就行了

其他操作

修改solr字段信息

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "replace-field":{
     "name":"customerMobile",
     "type":"string",
     "indexed":true
     "stored":false,
     "required":false,
     "multiValued":false}
}' http://node1:8983/solr/t_order_collection/schema

添加字段信息

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-field":{
     "name":"_id",
     "type":"plong",
     "indexed":true
     "stored":true,
     "required":true,
     "multiValued":false}
}' http://node1:8983/solr/t_order_collection/schema

删除字段信息

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "delete-field" : { "name":"_id" }
}' http://node1:8983/solr/t_order_collection/schema