更新时间:2024-11-29 GMT+08:00
支持HBase全文索引
操作场景
通过建立HBase表和Solr索引的映射关系(通过mapping.xml文件定义映射关系),提供统一的API操作HBase和Solr,支持索引存储Solr,而原始数据存储HBase。在Solr侧查询时,可以直接查出原始数据。
不支持在distrib=false下的查询。
前提条件
已成功安装Solr、HBase服务。
操作步骤
- 配置集配置。
- 获取初始配置集模板。
solrctl confset --generate ./confWithHBase -confWithHBase
vi confWithHBase/conf/managed-schema
managed-schema中uniqueKey对应字段需和HBase表RowKey一一对应,其它所有字段field属性stored需定义为false,即“stored=false”;即在Solr中只存储索引,原始值存储在HBase中。
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> <field name="name" type="text_general" indexed="true" stored="false"/> <field name="sku" type="text_en_splitting_tight" indexed="true" stored="false" omitNorms="true"/> <uniqueKey>id</uniqueKey>
- 创建配置集。
- 获取初始配置集模板。
- 配置HBase表和Solr索引的映射关系文件“mapping.xml”。
- 在mapping.xml文件中,index区域的field必须是在Solr Collection Schema中“indexed=true”的字段,non-index区域的field必须是在Solr Collection Schema的字段。
- 在mapping.xml中的column必须是table指定的HBase表中的列族和列。
- 在mapping.xml中<mapping table="test_tb">表示要与Solr索引建立映射关系的HBase表名。
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <mapping table="test_tb"> <index> <field name="name" column="I:n"/> <field name="alternative_names" column="I:a"/> <field name="latitude" column="I:la"/> <field name="longitude" column="I:ln"/> <field name="countrycode" column="I:x"/> <field name="population" column="I:p"/> <field name="elevation" column="I:e"/> <field name="timezone" column="I:t"/> <field name="lastupdate" column="I:las"/> <field name="text" column="I:tt"/> </index> <non-index> <field name="non_f1" column="I:n1"/> <field name="non_f2" column="I:n2"/> <field name="non_f3" column="I:n3"/> <field name="non_f4" column="I:n4"/> </non-index> </mapping>
- 创建Collection。
- 必须通过AdminInterface接口实现类LunaAdmin创建、删除HBase表和Collection。
- “java.lang.StringmappingFileDirPath”为mapping.xml所在文件夹路径。
主要API:
// Create hbase table with descriptor and split keys void createTable(org.apache.hadoop.hbase.HTableDescriptor desc, byte[][] splitKeys) // Create hbase table with descriptor and split keys, create solr collection with create request in default solr root path, add solr index on hbase void createTable(org.apache.hadoop.hbase.HTableDescriptordesc, byte[][]splitKeys, org.apache.solr.client.solrj.request.CollectionAdminRequest.CreatecreateRequest, java.lang.StringmappingFileDirPath) // Add solr collection on hbase table, with default solr root path void addCollection(org.apache.hadoop.hbase.TableNametable, org.apache.solr.client.solrj.request.CollectionAdminRequest.CreatecreateRequest, java.lang.StringmappingFileDirPath) // Delete hbase table, then delete solr collection of table void deleteTable(org.apache.hadoop.hbase.TableNametableName) // Delete solr collection of hbase table, with default solr root path void deleteCollection(org.apache.hadoop.hbase.TableNametable, java.lang.Stringcollection) // Delete all solr collection of hbase table, with defalut solr root path void deleteAllCollections(org.apache.hadoop.hbase.TableName table) // Check solr collection exists boolean collectionExists(java.lang.String collection) // Check hbase table exists. boolean tableExists(org.apache.hadoop.hbase.TableName tableName) // Get hbase table descriptor org.apache.hadoop.hbase.HTableDescriptor getTableDescriptor(org.apache.hadoop.hbase.TableName tableName)
- 索引。
通过AdminInterface接口实现类LunaAdmin获取Table句柄,调用HBase put API,录入数据到HBase表。在数据写入到HBase表的同时,根据mapping.xml配置在Solr中建立相应的索引。
// Get table which handle write/read org.apache.hadoop.hbase.client.Table getTable(org.apache.hadoop.hbase.TableName table)
- 查询。
- 在Solr侧,使用Solr原生的接口进行查询。
- 如果要关闭掉该特性,则在查询时加上参数“query.hbase=false”。
父主题: Solr业务常见操作