发明内容
有鉴于此,本发明提供一种基于HBase的全文检索方法及装置,以解决现有技术中查询效率较低的问题。
本发明提供了一种基于HBase的全文检索方法,将HBase与Solr引擎相连接,扩展Solr EndPoint对象,预先将HBase中待检索的KeyValue值所针对的索引内容存储至Solr引擎中;还包括:
服务器端接收客户端发送的查询请求,所述查询请求携带查询条件;
服务器端调用Solr EndPoint对象,Solr EndPoint对象将所述查询请求转发至Solr引擎,以使Solr引擎根据所述查询条件对索引内容进行全文检索;
Solr EndPoint对象接收Solr引擎返回的检索结果,并将所述检索结果发送至客户端。
优选地,
进一步包括:扩展Solr Coprocessor对象和HSearchTable对象,预先定义Solr索引配置和HBase索引配置,所述Solr索引配置用于限定存储至Solr引擎中的索引内容,所述HBase索引配置用于指示索引内容存储在Solr引擎的位置;
所述将HBase中待检索的KeyValue值所针对的索引内容存储至Solr引擎中,包括:服务器端接收客户端利用HSearchTable对象发送的Put对象,所述Put对象包括待索引的KeyValue集合;服务器端调用Solr Coprocessor对象,Solr Coprocessor对象根据所述Solr索引配置所限定的索引内容,遍历所述Put对象所包括待索引的KeyValue集合,为KeyValue集合中每一个KeyValue值构建Document对象;根据所述HBase索引配置针对每一个Document对象所指示存储在Solr引擎的位置,将构建的每一个Document对象写入Solr引擎中的相应位置中。
优选地,
进一步包括:所述检索结果中包括满足所述查询条件的RowKey值;
进一步包括:服务器端接收客户端根据所述检索结果以及Filters查询条件发送的Get查询对象;根据所述Get查询对象,在所述检索结果中查找满足所述Filters查询条件的查询结果,并将所述查询结果发送至客户端。
本发明还提供了一种基于HBase的全文检索方法,包括:
客户端向服务器端发送查询请求,所述查询请求携带查询条件,以使服务器端利用Solr引擎获取针对所述查询条件进行全文检索的检索结果;
接收服务器端返回的所述检索结果。
优选地,
进一步包括:客户端向服务器端发送Put对象,所述Put对象包括待索引的KeyValue集合,以使服务器端针对KeyValue集合中每一个KeyValue值构建Document对象,并将构建的Document对象写入Solr引擎中;
或,
进一步包括:所述检索结果中包括满足所述查询条件的RowKey值;
进一步包括:客户端根据所述检索结果以及Filters查询条件构建Get查询对象;并将构建的Get查询对象发送至服务器端,以使服务器端根据所述Get查询对象在所述检索结果中查找满足所述Filters查询条件的查询结果;并接收服务器端发送的查询结果;
或,
进一步包括:客户端通过调用HSearchTable对象向服务器端发送所述查询请求。
本发明还提供了一种服务器,包括:
扩展单元,用于将HBase与Solr引擎相连接,扩展Solr EndPoint对象,预先将HBase中待检索的KeyValue值所针对的索引内容存储至Solr引擎中;
接收单元,用于接收客户端发送的查询请求,所述查询请求携带查询条件;
转发单元,用于调用Solr EndPoint对象,Solr EndPoint对象将所述查询请求转发至Solr引擎,以使Solr引擎根据所述查询条件对索引内容进行全文检索;
发送单元,用于利用Solr EndPoint对象接收Solr引擎返回的检索结果,并将所述检索结果发送至客户端。
优选地,
所述扩展单元,用于扩展Solr Coprocessor对象和HSearchTable对象,预先定义Solr索引配置和HBase索引配置,所述Solr索引配置用于限定存储至Solr引擎中的索引内容,所述HBase索引配置用于指示索引内容存储在Solr引擎的位置;
所述扩展单元,用于服务器端接收客户端利用HSearchTable对象发送的Put对象,所述Put对象包括待索引的KeyValue集合;调用Solr Coprocessor对象,Solr Coprocessor对象根据所述Solr索引配置所限定的索引内容,遍历所述Put对象所包括待索引的KeyValue集合,为KeyValue集合中每一个KeyValue值构建Document对象;根据所述HBase索引配置针对每一个Document对象所指示存储在Solr引擎的位置,将构建的每一个Document对象写入Solr引擎中的相应位置中。
优选地,
进一步包括:所述检索结果中包括满足所述查询条件的RowKey值;
所述接收单元,用于接收客户端根据所述检索结果以及Filters查询条件发送的Get查询对象;根据所述Get查询对象,在所述检索结果中查找满足所述Filters查询条件的查询结果,并将所述查询结果发送至客户端。
本发明还提供了一种客户端,包括:
发送单元,用于向服务器端发送查询请求,所述查询请求携带查询条件,以使服务器端利用Solr引擎获取针对所述查询条件进行全文检索的检索结果;
接收单元,用于接收服务器端返回的所述检索结果。
优选地,
所述发送单元,用于向服务器端发送Put对象,所述Put对象包括待索引的KeyValue集合,以使服务器端针对KeyValue集合中每一个KeyValue值构建Document对象,并将构建的Document对象写入Solr引擎中;
或,
进一步包括:所述检索结果中包括满足所述查询条件的RowKey值;
所述发送单元,用于根据所述检索结果以及Filters查询条件构建Get查询对象;并将构建的Get查询对象发送至服务器端,以使服务器端根据所述Get查询对象在所述检索结果中查找满足所述Filters查询条件的查询结果;并接收服务器端发送的查询结果;
或,
所述发送单元,用于通过调用HSearchTable对象向服务器端发送所述查询请求。
本发明实施例提供了一种基于HBase的全文检索方法及装置,由于HBase中只利用Filters查询条件进行查询的效率较低,本发明实施例可以将HBase与Solr引擎相连接,使得在进行全文检索时,HBase的服务器端将全文检索的查询请求转发至Solr引擎,由Solr引擎进行全文检索,由于Solr引擎在进行全文检索时速度较快,因此提高了查询效率。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供了一种基于HBase的全文检索方法,将HBase与Solr引擎相连接,扩展Solr EndPoint对象,预先将HBase中待检索的KeyValue值所针对的索引内容存储至Solr引擎中;该方法可以包括以下步骤:
步骤101:服务器端接收客户端发送的查询请求,所述查询请求携带查询条件。
步骤102:服务器端调用Solr EndPoint对象,Solr EndPoint对象将所述查询请求转发至Solr引擎,以使Solr引擎根据所述查询条件对索引内容进行全文检索。
步骤103:Solr EndPoint对象接收Solr引擎返回的检索结果,并将所述检索结果发送至客户端。
根据上述方案,由于HBase中只利用Filters查询条件进行查询的效率较低,本发明实施例可以将HBase与Solr引擎相连接,使得在进行全文检索时,HBase的服务器端将全文检索的查询请求转发至Solr引擎,由Solr引擎进行全文检索,由于Solr引擎在进行全文检索时速度较快,因此提高了查询效率。
如图2所示,本发明实施例提供了一种基于HBase的全文检索方法,该方法可以包括:
步骤201:客户端向服务器端发送查询请求,所述查询请求携带查询条件,以使服务器端利用Solr引擎获取针对所述查询条件进行全文检索的检索结果。
步骤202:接收服务器端返回的所述检索结果。
根据上述方案,客户端在向服务器发送查询请求时,可以由服务器端利用Solr引擎实现全文检索,从而提供了查询的效率。
为使本发明的目的、技术方案和优点更加清楚,下面结合附图及具体实施例对本发明作进一步地详细描述。
如图3所示,本发明实施例提供了一种基于HBase的全文检索方法,该方法可以包括以下步骤:
步骤301:将HBase与Solr引擎相连接,扩展Solr EndPoint对象、SolrCoprocessor对象和HSearchTable对象,预先定义Solr索引配置和HBase索引配置。
如图4所示,在本实施例中,由于HBase在针对Filters查询条件进行检索时,检索效率较低,而Solr引擎在进行全文检索时的效率较高,因此可以将HBase与Solr引擎相连接,由Solr引擎执行HBase的全文检索操作。
其中,扩展的Solr Coprocessor对象用于实现索引的构建,HSearchTable对象用于被客户端调用所进行全文检索的执行操作,Solr EndPoint对象用于将查询请求转发给Solr引擎以实现Solr引擎的全文检索。
在本发明一优选实施例中,可以对Solr引擎进行配置,其中,Solr引擎是一种包括有多个Solr core的Solr集群,其中,需要设定Solr索引配置,Solr索引配置用于限定Solr core中存储的索引内容,该Solr索引配置可以如下表1所示:
表1:
Filed |
是否索引 |
是否保存 |
说明 |
Row |
否 |
是 |
HBase表的RowKey(行关键字) |
HTable |
否 |
是 |
HBase表名 |
Indexname |
否 |
是 |
在HBase中定义的索引名(如列名) |
Content |
是 |
否 |
HBase的Qualifier的KeyValue值 |
根据表1可知,Solr索引配置所限定的索引内容,其中该Solr索引配置可以是针对不同的HRegion所分别设置的,也可以是针对HBase中所有的HRegion进行设置的。除了Solr索引配置之外,当然还需要设置Solr集群中每个Solr core的配置以及solrconfig.xml。这两种的配置是针对Solr引擎的一般配置,可以是现有技术的配置,在此不作赘述。
在本发明一优选实施例中,可以对HBase实现HBase索引配置,该HBase索引配置用于指示索引内容存储在Solr引擎中的位置,且该HBase索引配置位于HTable的Family层面,该HBase索引配置可以如下表2所示:
表2:
属性 |
说明 |
name |
索引名称也是Qualifier的名称,每个Family内唯一(如列名) |
solrHttp |
本索引所存储的Solr core的rest地址 |
synchronous |
是否同步提交到Solr,默认YES |
根据上表可知,HBase索引配置针对不同的索引名限定了不同的Solrcore,根据默认的同步提交到Solr的配置,将该索引名对应的索引内容存储至相应的Solr core中。其中,该HBase索引配置可以是针对不同的HRegion进行分别设置的,也可以是针对HBase中所有的HRegion进行设置的。
步骤302:实现put对象所包括待索引的KeyValue集合中每一个KeyValue值的索引构建。
如图5所示,为索引构建流程图,该索引构建的过程可以包括:
1、客户端利用使用HBase原生的API向服务器端发送Put(更新)对象。其中,该Put对象中Put对象包括待索引的KeyValue集合。
2、服务器端利用HRegion接收该Put对象。
3、服务器端调用Solr Coprocessor对象的PrePut对象。
4、Solr Coprocessor对象根据Solr索引配置所限定的索引内容,遍历Put对象所包括待索引的KeyValue集合,为KeyValue集合中每一个KeyValue值构建Document对象。其中,构建的Document对象的内容如表1所示,并根据HBase索引配置针对每一个Document对象所指示存储在Solr引擎的位置,将构建的每一个Document对象写入Solr引擎中的相应位置中。其中,写入到Solr引擎方式可以是同步或异步方式。同步方式是指每构建一个Document对象,将该该构建的Document对象写入Solr引擎中;异步方式指在构建了预设个数的Document对象之后,将该预设个数的Document对象一起写入Solr引擎中。
步骤303:实现全文检索。
如图6所示,为本实施例实现全文检索的流程图,该全文检索的过程可以包括:
1、客户端向HSearchTable对象发送查询请求。该查询请求可以是针对“2015年下学期期末考试成绩”
2、HSearchTable对象向服务器端中任一一个HRegion发送查询请求,该查询请求中携带HSearchTable对象所限定的查询条件,该查询条件如下表3所示:
表3:
参数 |
类型 |
说明 |
indexname |
String |
索引名 |
query |
String |
查询语句(需符合solr语法) |
filters |
FilterList |
其他的HBase查询条件集合 |
根据表3可知,查询条件用于限定Solr引擎在表3中指定的索引名下以及利用指定的查询语句进行查询“2015年下学期期末考试成绩”。
3、服务器端调用Solr EndPoint对象。
4、Solr EndPoint对象将查询请求转发至Solr引擎。
5、Solr引擎根据查询请求对满足查询条件的索引内容进行全文检索,SolrEndPoint对象接收Solr引擎返回的检索结果,并将检索结果发送至客户端。其中,检索结果中包括满足查询条件的RowKey值。
由于Solr引擎可以实现HBase中数据的模糊检索、同义词、相似度检索,因此对于Solr引擎返回的检索结果可能包括很多个。例如,搜索结果包括:包含和/或部分包含有“2015年下学期期末考试成绩”的所有文档的ID。在本发明一优选实施例中,Solr引擎在返回检索结果为排序后的结果,例如,可以根据包含“2015年下学期期末考试成绩”字数进行排序,也可以通过Solr计算出的符合客户端需求进行排序等。为了实现对检索结果的进一步查询,该实现全文检索的步骤还可以包括:
7、客户端根据检索结果以及Filters查询条件构建Get查询对象;并将构建的Get查询对象发送至服务器端。
8、服务器端根据Get查询对象在检索结果中查找满足Filters查询条件的查询结果,并将查询结果返回给客户端。其中,该Filters查询条件可以是“二年级1班2015年下学期期末考试成绩”。由于是Get查询对象,因此HBase会很快响应并返回到客户端。
在本实施例中,还可以利用HBase实现索引内容的管理。其中,HBase表分区会有Flush、Split等操作,此分区数据的索引也需要进行相应的管理,包括:
Flush:如果是异步提交,则在preFlush时将队列中未更新到solr集群的document集进行提交。
Split、Compact:由于是一个solr集群,且所有分区中的索引内容均存储至该Solr引擎中,因此即使HBase Table的拆分合也不会影响Solr引擎中的索引内容。
索引重建:Endpoint对象可以执行索引内容重建的功能。
如图7所示,本发明实施例还提供了一种服务器,包括:
扩展单元701,用于将HBase与Solr引擎相连接,扩展Solr EndPoint对象,预先将HBase中待检索的KeyValue值所针对的索引内容存储至Solr引擎中;
接收单元702,用于接收客户端发送的查询请求,所述查询请求携带查询条件;
转发单元703,用于调用Solr EndPoint对象,Solr EndPoint对象将所述查询请求转发至Solr引擎,以使Solr引擎根据所述查询条件对索引内容进行全文检索;
发送单元704,用于利用Solr EndPoint对象接收Solr引擎返回的检索结果,并将所述检索结果发送至客户端。
进一步地,所述扩展单元,用于扩展Solr Coprocessor对象,预先定义Solr索引配置和HBase索引配置,所述Solr索引配置用于限定存储至Solr引擎中的索引内容,所述HBase索引配置用于指示索引内容存储在Solr引擎的位置;
所述扩展单元,用于服务器端接收客户端发送的Put对象,所述Put对象包括待索引的KeyValue集合;调用Solr Coprocessor对象,Solr Coprocessor对象根据所述Solr索引配置所限定的索引内容,遍历所述Put对象所包括待索引的KeyValue集合,为KeyValue集合中每一个KeyValue值构建Document对象;根据所述HBase索引配置针对每一个Document对象所指示存储在Solr引擎的位置,将构建的每一个Document对象写入Solr引擎中的相应位置中。
进一步包括:所述检索结果中包括满足所述查询条件的RowKey值;
所述接收单元,用于接收客户端根据所述检索结果以及Filters查询条件发送的Get查询对象;根据所述Get查询对象,在所述检索结果中查找满足所述Filters查询条件的查询结果,并将所述查询结果发送至客户端。
如图8所示,本发明实施例还提供了一种客户端,包括:
发送单元801,用于向服务器端发送查询请求,所述查询请求携带查询条件,以使服务器端利用Solr引擎获取针对所述查询条件进行全文检索的检索结果;
接收单元802,用于接收服务器端返回的所述检索结果。
进一步地,所述发送单元,用于向服务器端发送Put对象,所述Put对象包括待索引的KeyValue集合,以使服务器端针对KeyValue集合中每一个KeyValue值构建Document对象,并将构建的Document对象写入Solr引擎中;
或,
进一步包括:所述检索结果中包括满足所述查询条件的RowKey值;
所述发送单元,用于根据所述检索结果以及Filters查询条件构建Get查询对象;并将构建的Get查询对象发送至服务器端,以使服务器端根据所述Get查询对象在所述检索结果中查找满足所述Filters查询条件的查询结果;并接收服务器端发送的查询结果;
或,
所述发送单元,用于通过调用HSearchTable对象向服务器端发送所述查询请求。
根据上述方案,本发明的实施例至少可以实现如下有益效果:
1、由于HBase中只利用Filters查询条件进行查询的效率较低,本发明实施例可以将HBase与Solr引擎相连接,使得在进行全文检索时,HBase的服务器端将全文检索的查询请求转发至Solr引擎,由Solr引擎进行全文检索,由于Solr引擎在进行全文检索时速度较快,因此提高了查询效率。
2、可以利用Solr引擎实现HBase表中结构化文本数据的全文检索,实现对文本数据的模糊搜索、同义词、相似度检索等功能。
3、本发明实施例提供的方法是一种非侵入式的,客户端仍然使用HBase技术和编程模型,服务器端通过HBase的Coprocessor机制索引数据构建,通过Endpoint与搜索引擎交互实现检索功能,客户端不需要依赖搜索引擎的API。
4、本发明实施例提出的方法采用独立的搜索引擎处理数据的索引和检索,从而在降低HBase数据库压力同时提高查询性能。
上述设备内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个······”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质中。
最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。