全文检索系统及方法与流程

文档序号:16209291发布日期:2018-12-08 07:31阅读:648来源:国知局
全文检索系统及方法与流程
本公开涉及大数据
技术领域
,尤其涉及一种全文检索系统及方法。
背景技术
:图1示出相关技术中的全文检索系统的架构图。相关技术中,如图1所示,全文检索系统通过GPTextUserInterface获取索引操作,并将获取的索引操作发送给GPTextLib,由GPTextLib调用SolrCLI或者NativeCall将索引操作发送给Solr,Solr执行索引操作。其中,索引操作可以包括查询索引操作、创建索引操作、导入索引数据操作、更新索引数据操作、添加索引列操作、删除索引列操作和删除索引操作等。但是,如图1所示,全文检索引擎Solr与数据库Greenplum耦合度高,全文检索系统无法更新全文检索引擎Solr,也无法将全文检索引擎Solr更换为其它类型的全文检索引擎。此外,全文检索引擎Solr与数据库Greenplum之间的数据交互过程不透明,全文检索系统无法将全文检索引擎Solr移植到其它类型的数据库进行使用。数据库Greenplum对外的接口形式单一,不利于数据库Greenplum的再次开发。技术实现要素:有鉴于此,本公开提出了一种全文检索系统及方法,以解决相关技术中全文检索系统中的数据库与全文检索引擎耦合度较高的问题。根据本公开的一方面,提供了一种全文检索系统,所述全文检索系统包括用户接口模块、数据库、全文检索中间件和全文检索引擎,其中:所述用户接口模块,用于在获取到索引操作时,通过所述数据库向所述全文检索中间件发送所述索引操作;所述全文检索中间件,用于在确定所述索引操作为查询索引操作时,向所述全文检索引擎发送所述查询索引操作;所述全文检索引擎,用于执行所述查询索引操作,得到查询结果。根据本公开的另一方面,提供了一种全文检索方法,应用于全文检索系统中的全文检索中间件,所述方法包括:接收数据库发送的索引操作;在确定所述索引操作为查询索引操作时,向全文检索引擎发送所述查询索引操作,以使所述全文检索引擎执行所述查询索引操作,得到查询结果。根据本公开的另一方面,提供了一种全文检索中间件,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为执行上述方法。根据本公开的另一方面,提供了一种非易失性计算机可读存储介质,其上存储有计算机程序指令,其中,所述计算机程序指令被处理器执行时实现上述方法。本公开的全文检索系统及方法,通过全文检索中间件能够实现全文检索引擎与数据库之间的解耦,从而能够实现对全文检索引擎进行更新或更换,也能够实现将全文检索引擎快速移植到其它数据库进行使用,扩大全文检索系统应用的范围,提高全文检索系统开发的便捷性。根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。附图说明包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。图1示出相关技术中的全文检索系统的架构图。图2示出根据本公开一实施例的全文检索系统的架构图。图3示出根据本公开一实施例的全文检索系统的框图。图4示出根据本公开一实施例的全文检索系统的框图。图5示出根据本公开一实施例的全文检索系统的框图。图6示出根据本公开一实施例的全文检索系统的框图。图7示出根据本公开一实施例的全文检索方法的流程图。图8示出根据本公开一实施例的全文检索方法的流程图。图9示出根据本公开一实施例的全文检索中间件的框图。具体实施方式以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或者相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。在这里专用的词“示例性”意为“用作例子、实施例或者说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或者好于其它实施例。另外,为了更好的说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。为了使本
技术领域
的人员更好地理解本公开实施例中的技术方案,下面先对本公开实施例中涉及的部分技术术语进行简单说明。Greenplum:是一种关系型数据库集群,可以认为Greenplum为多个独立的数据库服务组合成的逻辑数据库。Greenplum采用无共享(Shared-Nothing)架构,由控制节点(Master节点)和多个数据节点(Segment节点)通过相互连接(Interconnect)组成。SharedNothing架构:各个处理单元都有自己私有的CPU、内存和硬盘等,不存在共享资源,各处理单元之间通过协议通信,并行处理和扩展能力更好。各节点相互独立,各自处理自己的数据,处理之后的结果可能向上层汇总或者在节点间流转。Share-Nothing架构在扩展性和成本上都有明显优势。Master节点:建立与客户端的连接和管理;解析SQL(StructuredQueryLanguage,结构化查询语言)语句并形成执行计划;将执行计划向Segment节点分发,并收集Segment节点的执行结果;Master节点不存储业务数据,只存储数据字典。Segment节点:业务数据的存储和存取;执行解析SQL语句得到的执行计划。全文检索(FullTextSearch):是指计算机索引程序通过扫描文章中的每个词,对每个词创建一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序根据事先创建的索引进行查找,并将查询结果返回给用户的检索方式。全文检索需要具备创建索引和提供查询的基本功能。Elasticsearch(简写:ES):是基于Lucene(用于全文检索和搜寻的开源程式库)的检索服务器,通过RESTful(RepresentationalStateTransfer,表现层状态转化)接口隐藏底层的复杂性,提供了分布式多用户能力的全文检索引擎,从而让全文检索变得简单。Solr:是基于Lucene的检索服务器。对Lucene进行扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了完善的功能管理界面,是一款高性能的全文检索引擎。索引:是指对数据库的表中一列或者多列的数据进行排序的一种结构,使用索引可以快速访问数据库的表中的特定信息。查询索引操作:是指用于查询索引的操作命令。查询索引是指在获取到查询索引请求时,检索已创建的索引,并返回查询索引请求对应的查询结果的过程。创建索引操作:是指用于创建索引的操作命令。创建索引是指创建索引的过程。通过创建索引能够提高对表的查询速度,对表中的数据列的数据进行检查。索引的名称可以为数据库名.表名。例如,detext为数据库名,表名为mobile,则创建的索引的名称可以为detext.mobile。导入索引数据操作:是指用于导入索引数据的操作命令。导入索引数据是指在创建索引之后,首次将表中的数据导入索引的过程。例如,将表中的某些列数据导入索引。更新索引数据操作:是指用于更新索引数据的操作命令。更新索引数据是指在创建索引并导入索引数据之后,如果数据库中的表增加或者减少数据,则将表增加的数据同步到索引,或者将表减少的数据从索引中删除的过程。例如,将表中的某些列增加的数据导入索引。添加索引列操作:是指用于添加索引列的操作命令。添加索引列是指在创建索引并导入索引数据之后,将表中未导入索引的数据导入到索引的过程。例如,将表中未导入索引的某些列数据导入索引。删除索引列操作:是指用于删除索引列的操作命令。删除索引列是指在创建索引并导入索引数据之后,将已经导入索引的表中的数据从索引中删除的过程。例如,将已经导入索引的某些列数据从索引中删除。删除索引操作:是指用于删除索引的操作命令。删除索引是指将已经创建的索引删除的过程。通过删除索引能够释放硬盘空间。图1示出相关技术中的全文检索系统的架构图。如图1所示:GPTextUserInterface(Greenplum全文检索用户接口模块):用于向用户提供输入SQL语句的界面,用户可以通过在该界面中输入SQL语句操作全文检索引擎Solr。GPTextLib(Greenplum全文检索库):用于向全文检索引擎Solr提供底层实现。通过GPTextLib可以调用SolrCLI(Solr命令行)或者本地函数。SolrCLI:是全文检索引擎Solr对外提供的操作命令。NativeCall(调用本地函数):是指调用者和被调用者在同一个内存空间。GPDB(GreenplumDatabase):Greenplum数据库。SolrCloud:基于Solr订制的分布式全文检索引擎。相关技术中,如图1所示,全文检索系统通过GPTextUserInterface获取索引操作,并将获取的索引操作发送给GPTextLib。如果索引操作为查询索引操作,则由GPTextLib调用SolrCLI或者NativeCall将查询索引操作发送给Solr,Solr执行查询索引操作。如果索引操作为非查询索引操作,则由GPTextLib调用SolrCLI或者NativeCall将非查询索引操作发送给Solr,并内部调用Greenplum中的Segment节点向Solr中的SolrShard传入索引值,Solr执行非查询索引操作。但是,如图1所示,全文检索引擎Solr与数据库Greenplum耦合度高,全文检索系统无法更新全文检索引擎Solr,也无法将全文检索引擎Solr更换为其它类型的全文检索引擎。此外,全文检索引擎Solr与数据库Greenplum之间的数据交互过程不透明,全文检索系统无法将全文检索引擎Solr移植到其它类型的数据库进行使用。数据库Greenplum对外的接口形式单一,不利于数据库Greenplum的再次开发。图2示出根据本公开一实施例的全文检索系统的架构图。如图2所示:DETextUserInterface(用户自定义全文检索用户接口模块):用户自定义函数,用于向用户提供输入SQL语句的界面,用户可以通过在该界面中输入SQL语句操作全文检索引擎。全文检索中间件:具有中间件接口,中间件接口为JavaAPI(ApplicationProgrammingInterface,应用程序编程接口)。通过中间件接口可以调用全文检索中间件。全文检索中间件用于解耦数据库和全文检索引擎。GreenplumPLJava:用户自定义函数,Greenplum中用于将SQL语句转换成Java语句,并调用中间件接口的模块。JDBC(JavaDataBaseConnectivity,Java数据库连接):一种能够执行SQL语句的接口,JDBC为JavaAPI。JDBC可以为多种类型的数据库提供统一访问接口。例如,JDBC可以为Greenplum、PostgreSQL和PostgreSQL-XC3类型的数据库提供统一访问接口。SolrJ(SolrJavaAPI):全文检索引擎Solr对外提供的全文检索引擎接口,全文检索引擎接口为JavaAPI。SolrJ是Java连接Solr进行查询检索和索引更新维护的JAR(JavaArchive,Java归档文件)包,通过SolrJ可以调用全文检索引擎Solr。SolrCloud:基于Solr订制的分布式全文检索引擎。图3示出根据本公开一实施例的全文检索系统的框图。如图3所示,全文检索系统包括用户接口模块31、数据库32、全文检索中间件33和全文检索引擎34。其中,用户接口模块31,用于在获取到索引操作时,通过数据库32向全文检索中间件33发送索引操作;全文检索中间件33,用于在确定索引操作为查询索引操作时,向全文检索引擎34发送查询索引操作;全文检索引擎34,用于执行查询索引操作,得到查询结果。其中,数据库32的类型可以为Greenplum、PostgreSQL或PostgreSQL-XC3等,全文检索引擎34的类型可以为Solr或者ES等,本公开对数据库的类型和全文检索引擎的类型均不作限制。其中,索引操作可以包括查询索引操作和非查询索引操作。在本公开中,查询索引操作以外的其它索引操作均可以称为非查询索引操作。作为一个示例,用户接口模块31为DETextUserInterface,数据库32为Greenplum,全文检索引擎34为Solr。图4示出根据本公开一实施例的全文检索系统的框图。如图4所示,DETextUserInterface在获取到索引操作时,向Greenplum发送索引操作。Greenplum通过调用中间件接口即中间件JavaAPI,向全文检索中间件发送索引操作。全文检索中间件在确定索引操作为查询索引操作时,通过调用全文检索引擎接口即SolrJavaAPI,向Solr发送查询索引操作。Solr执行查询索引操作,得到查询结果。在一种实现方式中,用户接口模块31,还用于在获取到索引操作时,向数据库32发送索引操作;数据库32,用于将索引操作转换为Java语句的索引操作,并通过调用中间件接口,向全文检索中间件33发送Java语句的索引操作。在一种实现方式中,数据库32具有转换模块。转换模块用于将SQL语句的索引操作转换为Java语句的索引操作,并通过调用中间件接口向全文检索中间件33发送Java语句的索引操作。例如,转换模块可以为在数据库32中设置的PLJava。作为一个示例,用户接口模块31为DETextUserInterface,数据库32为Greenplum,转换模块为GreenplumPLJava,全文检索引擎34为Solr。图5示出根据本公开一实施例的全文检索系统的框图。如图5所示,DETextUserInterface在获取到SQL语句的索引操作时,向Greenplum发送SQL语句的索引操作。Greenplum中的GreenplumPLJava将SQL语句的索引操作转换为Java语句的索引操作。GreenplumPLJava通过调用中间件接口即中间件JavaAPI,向全文检索中间件发送Java语句的索引操作。后续执行过程在此不再赘述。在一种实现方式中,全文检索中间件33,还用于在确定索引操作为非查询索引操作时,通过调用数据库接口从数据库32获取执行非查询索引操作所需的数据;还用于根据非查询索引操作和获取的数据,生成全文检索引擎输入文件,并通过调用全文检索引擎接口向全文检索引擎34发送全文检索引擎输入文件;全文检索引擎34,还用于接收全文检索引擎输入文件,并根据全文检索引擎输入文件,执行非查询索引操作,得到执行结果。其中,执行结果可以包括执行成功或执行失败。其中,全文检索引擎输入文件是指对执行非查询索引操作所需的数据进行处理(例如分词、去除标点、去除停词、单词转变等)之后得到的文件。例如,全文检索引擎为Solr,则全文检索引擎输入文件为SolrInputDocument。在一种实现方式中,非查询索引操作包括创建索引操作、导入索引数据操作、更新索引数据操作、添加索引列操作、删除索引列操作和删除索引操作中的一项或者多项。需要说明的是,尽管以创建索引操作、导入索引数据操作、更新索引数据操作、添加索引列操作、删除索引列操作和删除索引操作作为示例介绍了非查询索引操作如上,但本领域技术人员能够理解,本公开应不限于此。本领域技术人员可以根据实际应用场景灵活设定非查询索引操作。作为一个示例,用户接口模块31为DETextUserInterface,数据库32为Greenplum,全文检索引擎34为Solr。图6示出根据本公开一实施例的全文检索系统的框图。如图6所示,DETextUserInterface在获取到索引操作时,向Greenplum发送索引操作。Greenplum通过调用中间件接口即中间件JavaAPI,向全文检索中间件发送索引操作。全文检索中间件在确定索引操作为非查询索引操作时,通过调用数据库接口即JDBC,从Greenplum获取执行非查询索引操作所需的数据。全文检索中间件根据非查询索引操作和获取的数据,生成全文检索引擎输入文件即SolrInputDocument。全文检索中间件通过调用全文检索引擎接口即SolrJavaAPI,向Solr发送全文检索引擎输入文件。Solr接收全文检索引擎输入文件,并根据全文检索引擎输入文件,执行非查询索引操作,得到执行结果。在一种实现方式中,在非查询索引操作为导入索引数据操作、更新索引数据操作或添加索引列操作时,需要数据库32获取执行导入索引数据操作、更新索引数据操作或添加索引列操作所需的数据。在一种实现方式中,数据库32,还用于在索引操作为导入索引数据操作时,将导入索引数据操作包括的各个第一数据列对应的数据确定为执行导入索引数据操作所需的数据。在一种实现方式中,数据库32,还用于在索引操作为更新索引数据操作时,将更新索引数据操作包括的索引对应的各个第二数据列对应的增加或者减少的数据确定为执行更新索引数据操作所需的数据。在一种实现方式中,数据库32,还用于在索引操作为添加索引列操作时,将添加索引列操作包括的各个第三数据列对应的数据确定为执行添加索引列操作所需的数据。在一种实现方式中,全文检索引擎34,还用于通过全文检索引擎接口向全文检索中间件33发送查询结果或执行结果;全文检索中间件33,还用于接收查询结果或执行结果,并通过中间件接口向用户接口模块31发送查询结果或执行结果;用户接口模块31,还用于展示查询结果或执行结果。本公开的全文检索系统,通过全文检索中间件能够实现全文检索引擎与数据库之间的解耦,从而能够实现对全文检索引擎进行更新或更换,也能够实现将全文检索引擎快速移植到其它数据库进行使用,扩大全文检索系统应用的范围,提高全文检索系统开发的便捷性。示例一:作为一个示例,用户接口模块31为DETextUserInterface,数据库32为Greenplum,转换模块为GreenplumPLJava,全文检索引擎34为Solr。如图2所示,DETextUserInterface在获取到SQL语句的索引操作时,向Greenplum发送SQL语句的索引操作。Greenplum中的GreenplumPLJava将SQL语句的索引操作转换为Java语句的索引操作。GreenplumPLJava通过调用中间件接口即中间件JavaAPI,向全文检索中间件发送Java语句的索引操作。如图2所示,全文检索中间件在确定索引操作为查询索引操作时,通过调用全文检索引擎接口即SolrJavaAPI,向Solr发送查询索引操作。Solr执行查询索引操作,得到查询结果。Solr通过全文检索引擎接口向全文检索中间件发送查询结果。全文检索中间件接收查询结果,通过中间件接口向DETextUserInterface发送查询结果。DETextUserInterface展示查询结果。如图2所示,全文检索中间件在确定索引操作为非查询索引操作时,通过调用数据库接口即JDBC,从Greenplum获取执行非查询索引操作所需的数据。全文检索中间件根据非查询索引操作和获取的数据,生成全文检索引擎输入文件即SolrInputDocument。全文检索中间件通过调用全文检索引擎接口即SolrJavaAPI,向Solr发送全文检索引擎输入文件。Solr接收全文检索引擎输入文件,并根据全文检索引擎输入文件,执行非查询索引操作,得到执行结果。Solr通过全文检索引擎接口向全文检索中间件发送执行结果。全文检索中间件接收执行结果,通过中间件接口向DETextUserInterface发送执行结果。DETextUserInterface展示执行结果。示例二:作为一个示例,数据库名为detext,数据库detext包括表,表名为mobile。表1示出根据本公开一实施例的数据库detext中的表mobile。如表1所示,表mobile包括数据列:编号id、供应商vendor、型号model、价格price和详情描述description。其中,表mobile的主键为编号id。表1编号id供应商vendor型号model价格price详情描述description1ar12499cpu:super180;memory:4G;storage:64G2ar23299cpu:super190;memory:6G;storage:128G3cs13999cpu:super160;memory:6G;storage:128G4dp12699cpu:strong960;memory:6G;storage:64G客户端通过SSH(SecureShell,安全外壳协议)连接数据库Greenplum的Master节点,将默认Root账户切换到MPP(MassivelyParallelProcessor,大规模并行处理)的管理员帐户。客户端登录数据库detext,并初始全文检索服务。创建索引,入参即索引的名称为“数据库名.表名”。例如,创建索引的操作命令selectdetext.create_index(‘detext.mobile’),即创建索引detext.mobile。导入索引数据操作,选择表中任意数据列(主键必选)名称以逗号分隔。例如,导入索引数据的操作命令selectdetext.commit_index(‘detext.mobile’,‘id,model,price’),如表2所示,即将表1中数据列编号id、型号model和价格price导入到索引detext.mobile。表2编号id型号model价格price1r124992r232993s139994p12699例如,查询索引的操作命令selectdetext.search(‘detext.mobile’,’r’),即通过索引detext.mobile查询与r相关的信息,得到的查询结果为{id:1,model:r1,price:2499}、{id:2,model:r2,price:3299}。表3示出根据本公开一实施例的数据库detext中的表mobile。如表3所示,将表3相比于表1,确定表mobile增加数据{id:5,vendor:e,model:r3,price:1499,description:cpu:super140;memory:4G;storage:32G}。例如,更新索引数据的操作命令selectdetext.update_index(‘detext.mobile’),如表4所示,即将表3相比于表1增加的数据{id:5,model:r3,price:1499}同步到索引detext.mobile。表3编号id供应商vendor型号model价格price详情描述description1ar12499cpu:super180;memory:4G;storage:64G2ar23299cpu:super190;memory:6G;storage:128G3cs13999cpu:super160;memory:6G;storage:128G4dp12699cpu:strong960;memory:6G;storage:64G5er31499cpu:super140;memory:4G;storage:32G表4编号id型号model价格price5r31499例如,查询索引的操作命令selectdetext.search(‘detext.mobile’,’r’),即通过索引detext.mobile查询与r相关的信息,得到的查询结果为{id:1,model:r1,price:2499}、{id:2,model:r2,price:3299}、{id:5,model:r3,price:1499}。添加索引列,选择表中任意数据列名称以逗号分隔。例如,添加索引列的操作命令selectdetext.add_column(‘detext.mobile’,‘vendor’),如表5所示,即将表3中数据列vendor添加到索引detext.mobile。表5供应商vendoraacde例如,查询索引的操作命令selectdetext.search(‘detext.mobile’,’r’),即通过索引detext.mobile查询与r相关的信息,得到的查询结果为{id:1,vendor:a,model:r1,price:2499}、{id:2,vendor:a,model:r2,price:3299}、{id:5,vendor:e,model:r3,price:1499}。删除索引列,选择表中任意数据列名称以逗号分隔。例如,删除索引列的操作命令selectdetext.remove_column(‘detext.mobile’,‘price’),如表6所示,即将已导入到索引detext.mobile的表3中数据列price删除。表6价格price24993299399926991499例如,查询索引的操作命令selectdetext.search(‘detext.mobile’,’r’),即通过索引detext.mobile查询与r相关的信息,得到的查询结果为{id:1,vendor:a,model:r1}、{id:2,vendor:a,model:r2}、{id:5,vendor:e,model:r3}。删除索引,入参即索引的名称为“数据库名.表名”。例如,删除索引的操作命令selectdetext.delete_index(‘detext.mobile’),即删除索引detext.mobile。图7示出根据本公开一实施例的全文检索方法的流程图。该方法应用于全文检索系统中的全文检索中间件。如图7所示,该方法包括步骤S71和步骤S72。在步骤S71中,接收数据库发送的索引操作。在步骤S72中,在确定索引操作为查询索引操作时,向全文检索引擎发送查询索引操作,以使全文检索引擎执行查询索引操作,得到查询结果。在一种实现方式中,该方法还包括:在接收到全文检索引擎发送的查询结果时,通过中间件接口向用户接口模块发送查询结果,以使用户接口模块展示查询结果。图8示出根据本公开一实施例的全文检索方法的流程图。该方法应用于全文检索系统中的全文检索中间件。如图8所示,该方法包括步骤S81至步骤S83。在步骤S81中,接收数据库发送的索引操作。在步骤S82中,在确定索引操作为非查询索引操作时,通过调用数据库接口从数据库获取执行非查询索引操作所需的数据。在步骤S83中,根据非查询索引操作和获取的数据,生成全文检索引擎输入文件,并通过调用全文检索引擎接口向全文检索引擎发送全文检索引擎输入文件,以使全文检索引擎根据全文检索引擎输入文件,执行非查询索引操作,得到执行结果。在一种实现方式中,该方法还包括:在接收到全文检索引擎发送的执行结果时,通过中间件接口向用户接口模块发送执行结果,以使用户接口模块展示执行结果。在一种实现方式中,非查询索引操作包括创建索引操作、导入索引数据操作、更新索引数据操作、添加索引列操作、删除索引列操作和删除索引操作中的一项或者多项。本公开的全文检索方法,通过全文检索中间件能够实现全文检索引擎与数据库之间的解耦,从而能够实现对全文检索引擎进行更新或更换,也能够实现将全文检索引擎快速移植到其它数据库进行使用,扩大全文检索系统应用的范围,提高全文检索系统开发的便捷性。图9示出根据本公开一实施例的全文检索中间件的框图。参照图9,该全文检索中间件900可包括处理器901、存储有机器可执行指令的机器可读存储介质902。处理器901与机器可读存储介质902可经由系统总线903通信。并且,处理器901通过读取机器可读存储介质902中与全文检索逻辑对应的机器可执行指令以执行上文所述的全文检索方法。本文中提到的机器可读存储介质902可以是任何电子、磁性、光学或者其它物理存储装置,可以包含或者存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:RAM(RadomAccessMemory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。以上已描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本
技术领域
的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或者对市场中的技术的技术改进,或者使本
技术领域
的其它普通技术人员能理解本文披露的各实施例。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1