CN111400362A - 一种基于Elasticsearch的分布式搜索系统搭建方法以及装置 - Google Patents
一种基于Elasticsearch的分布式搜索系统搭建方法以及装置 Download PDFInfo
- Publication number
- CN111400362A CN111400362A CN202010101469.XA CN202010101469A CN111400362A CN 111400362 A CN111400362 A CN 111400362A CN 202010101469 A CN202010101469 A CN 202010101469A CN 111400362 A CN111400362 A CN 111400362A
- Authority
- CN
- China
- Prior art keywords
- data
- query
- index
- cluster
- elasticissearch
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 45
- 230000011218 segmentation Effects 0.000 claims abstract description 19
- 230000008569 process Effects 0.000 claims description 10
- 238000010276 construction Methods 0.000 claims description 6
- 238000004590 computer program Methods 0.000 claims description 3
- 230000001360 synchronised effect Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 4
- 230000002776 aggregation Effects 0.000 description 3
- 238000004220 aggregation Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 238000012163 sequencing technique Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000004931 aggregating effect Effects 0.000 description 1
- 230000001174 ascending effect Effects 0.000 description 1
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/953—Querying, e.g. by the use of web search engines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开是关于一种基于Elasticsearch的分布式搜索系统搭建方法、装置、电子设备以及存储介质,涉及计算机技术领域。该方法包括:配置Java环境并安装稳定版本的Elasticsearch集群;在所述Elasticsearch集群中配置中文分词器插件;创建索引并确定所述索引中各字段的数据类型;通过RabbitMq消息中间件接入数据,并与所述Elasticsearch集群异步更新;根据所述接入数据确定匹配字段及查询排序策略。本公开基于Elasticsearch的分布式搜索系统搭建后可以提高模糊匹配的搜索效率,提升用户使用体验。
Description
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种基于Elasticsearch的分布式搜索系统搭建方法、装置、电子设备以及计算机可读存储介质。
背景技术
现有全站搜索系统是完全依托于MySQL数据库上,用户前台发送搜索请求,通过nginx web服务器请求到后端php程序,后端php程序连接MySQL数据,通过模糊查询来完成这次查询请求。
上述使用场景中,在处理用户检索请求时,完全依赖MySQL数据库响应性能较低的模糊匹配,当数据库的数据量达到一个量级或是用户的请求较低时,会出现CPU使用率高、响应延迟等情况,也因此导致系统响应超时,用户体验不好的问题,甚至可能因为服务器压力过大而导致系统崩溃。
因此,需要提供一种至少能够解决上述问题的技术方案。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开的目的在于提供一种基于Elasticsearch的分布式搜索系统搭建方法、装置、电子设备以及计算机可读存储介质,进而至少在一定程度上克服由于相关技术的限制和缺陷而导致的一个或者多个问题。
根据本公开的一个方面,提供一种基于Elasticsearch的分布式搜索系统搭建方法,包括:
Elasticsearch集群搭建步骤,配置Java环境并安装稳定版本的Elasticsearch集群;
中文分词器插件配置步骤,在所述Elasticsearch集群中配置中文分词器插件;
创建索引步骤,创建索引并确定所述索引中各字段的数据类型;
数据异步接入步骤,通过RabbitMq消息中间件接入数据,并与所述Elasticsearch集群异步更新;
查询语句构建步骤,根据所述接入数据确定匹配字段及查询排序策略。
在本公开的一种示例性实施例中,所述Elasticsearch集群搭建步骤中,通过配置JDK环境变量实现Java环境的配置。
在本公开的一种示例性实施例中,所述创建索引步骤还包括:
根据创建索引确定的所述各字段的数据属性;及
根据创建索引确定的所述各字段的数据类型包括但不限于核心数据类型与复杂数据类型。
在本公开的一种示例性实施例中,所述数据异步接入步骤还包括:
通过数据同步接口接收数据更新请求后,将所述更新数据暂存在RabbitMq消息中间件中;
通过后端通过守护进程将所述消息中间件RabbitMq中数据批量写入到所述elasticsearch集群中。
在本公开的一种示例性实施例中,所述查询语句构建步骤还包括:
根据查询字段数量匹配查询规则;
设置查询返回的数量;
配置指定查询范围;
通过对子查询结果评分确定查询排序策略。
在本公开的一个方面,提供一种基于Elasticsearch的分布式搜索系统搭建装置,包括:
Elasticsearch集群搭建模块,用于配置Java环境并安装稳定版本的Elasticsearch集群;
中文分词器插件配置模块,用于在所述Elasticsearch集群中配置中文分词器插件;
创建索引模块,用于创建索引并确定所述索引中各字段的数据类型;
数据异步接入模块,用于通过RabbitMq消息中间件接入数据,并与所述Elasticsearch集群异步更新;
查询语句构建模块,用于根据所述接入数据确定匹配字段及查询排序策略。
在本公开的一个方面,提供一种电子设备,包括:
处理器;以及
存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时实现根据权利要求1至5中任一项所述的方法。
在本公开的一个方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现根据上述任意一项所述的方法。
本公开的示例性实施例中的基于Elasticsearch的分布式搜索系统搭建方法,配置Java环境并安装稳定版本的Elasticsearch集群;在所述Elasticsearch集群中配置中文分词器插件;创建索引并确定所述索引中各字段的数据类型;通过RabbitMq消息中间件接入数据,并与所述Elasticsearch集群异步更新;根据所述接入数据确定匹配字段及查询排序策略。一方面,基于Elasticsearch的分布式搜索系统搭建后可以提升用户请求较低时的使用体验;另一方面,由于Elasticsearch是一个分布式可扩展的实时搜索和分析引擎,能够处理PB级别的结构化或非结构化数据,提高了模糊匹配的搜索效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
通过参照附图来详细描述其示例实施例,本公开的上述和其它特征及优点将变得更加明显。
图1示出了根据本公开一示例性实施例的基于Elasticsearch的分布式搜索系统搭建方法的流程图;
图2示出了根据本公开一示例性实施例的基于Elasticsearch的分布式搜索系统搭建装置的示意框图;
图3示意性示出了根据本公开一示例性实施例的电子设备的框图;以及
图4示意性示出了根据本公开一示例性实施例的计算机可读存储介质的示意图。
具体实施方式
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本公开将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本公开的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而没有所述特定细节中的一个或更多,或者可以采用其它的方法、组元、材料、装置、步骤等。在其它情况下,不详细示出或描述公知结构、方法、装置、实现、材料或者操作以避免模糊本公开的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个软件硬化的模块中实现这些功能实体或功能实体的一部分,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
在本示例实施例中,首先提供了一种基于Elasticsearch的分布式搜索系统搭建方法,可以应用于计算机等电子设备;参考图1中所示,该基于Elasticsearch的分布式搜索系统搭建方法可以包括以下步骤:
Elasticsearch集群搭建步骤S110,配置Java环境并安装稳定版本的Elasticsearch集群;
中文分词器插件配置步骤S120,在所述Elasticsearch集群中配置中文分词器插件;
创建索引步骤S130,创建索引并确定所述索引中各字段的数据类型;
数据异步接入步骤S140,通过RabbitMq消息中间件接入数据,并与所述Elasticsearch集群异步更新;
查询语句构建步骤S150,根据所述接入数据确定匹配字段及查询排序策略。
根据本示例实施例中的基于Elasticsearch的分布式搜索系统搭建方法,一方面,基于Elasticsearch的分布式搜索系统搭建后可以提升用户请求较低时的使用体验;另一方面,由于Elasticsearch是一个分布式可扩展的实时搜索和分析引擎,能够处理PB级别的结构化或非结构化数据,提高了模糊匹配的搜索效率。
下面,将对本示例实施例中的基于Elasticsearch的分布式搜索系统搭建方法进行进一步的说明。
在Elasticsearch集群搭建步骤S110中,配置Java环境并安装稳定版本的Elasticsearch集群。
本示例实施方式中,通过配置JDK环境变量实现Java环境的配置。具体的:(1)配置JDK环境
配置环境变量
export JAVA_HOME="/opt/jdk1.8.0_144"
export PATH="$JAVA_HOME/bin:$PATH"
export CLASSPATH=".:$JAVA_HOME/lib"
(2)安装稳定版本elasticsearch
a.官方下载开源elasticsearch软件包;
b.解压elastisearch安装包
c.创建用户组及用户
groupadd esgroup
useradd esuser-g esgroup-p espassword
d.更改elasticsearch文件夹及内部文件的所属用户及组
cd/opt
chown-R esuser:esgroup elasticsearch-6.2.4
e.切换用户并运行:
./bin/elasticsearch
在中文分词器插件配置步骤S120中,在所述Elasticsearch集群中配置中文分词器插件。
本示例实施方式中,通过如下步骤实现中文分词器插件在Elasticsearch集群中的配置
(1).下载中文分词器;
(2).解压elasticsearch-analysis-ik-master.zip
unzip elasticsearch-analysis-ik-master.zip;
(3).进入elasticsearch-analysis-ik-master,编译源码
mvn clean install-Dmaven.test.skip=true;
(4).在es的plugins文件夹下创建目录ik;
(5).将编译后生成的elasticsearch-analysis-ik-版本.zip移动到ik下并解压;
(6).解压后的内容移动到ik目录下。
在创建索引步骤S130中,创建索引并确定所述索引中各字段的数据类型。
本示例实施方式中,所述创建索引步骤还包括:
根据创建索引确定的所述各字段的数据属性;及
根据创建索引确定的所述各字段的数据类型包括但不限于核心数据类型与复杂数据类型。
本示例实施方式中,创建索引确定索引mapping,mapping定义了type中每个字段的数据类型以及这些字段如何分词的相关属性:
{"myindex":{"mappings":{"article":{"properties":{"author_id":{"type":"long"},"content":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"post_date":{"type":"date"},"title":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}}}}}
创建索引的时候,可以预先定义字段的类型以及相关属性,这样就能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理字符串值等。
(1).核心数据类型
字符型:string,string类型包括,text和keyword
text类型被用来索引长文本,在建立索引前会将这些文本进行分词,转化为词的组合,建立索引。允许es来检索这些词语。text类型不能用来排序和聚合。
Keyword类型不需要进行分词,可以被用来检索过滤、排序和聚合。keyword类型字段只能用本身来进行检索。
数字型:long,integer,short,byte,double,float;
日期型:date;
布尔型:Boolean;
二进制:binary;
(2).复杂数据类型
数组类型(Array datatype):数组类型不需要专门指定数组元素的type,例如:
字符型数组:["one","two"];
整型数组:[1,2];
数组型数组:[1,[2,3]]等价于[1,2,3];
对象数组:[{"name":"Mary","age":12},{"name":"John","age":10}];
对象类型(Object datatype):_object_用于单个JSON对象;
嵌套类型(Nested datatype):_nested_用于JSON数组;
支持的属性:
"store":false//是否单独设置此字段的是否存储而从_source字段中分离,默认是false,只能搜索,不能获取值;
"index":true//分词,不分词是:false,设置成false,字段将不会被索引;
"analyzer":"ik"//指定分词器,默认分词器为standard analyzer;
"boost":1.23//字段级别的分数加权,默认值是1.0
"doc_values":false//对not_analyzed字段,默认都是开启,分词字段不能使用,对排序和聚合能提升较大性能,节约内存;
"fielddata":{"format":"disabled"}//针对分词字段,参与排序或聚合时能提高性能,不分词字段统一建议使用doc_value;
"fields":{"raw":{"type":"string","index":"not_analyzed"}}//可以对一个字段提供多种索引模式,同一个字段的值,一个分词,一个不分词;
"ignore_above":100//超过100个字符的文本,将会被忽略,不被索引;
"include_in_all":ture//设置是否此字段包含在_all字段中,默认是true,除非index设置成no选项;
"index_options":"docs"//4个可选参数docs(索引文档号),freqs(文档号+词频),positions(文档号+词频+位置,通常用来距离查询),offsets(文档号+词频+位置+偏移量,通常被使用在高亮字段)分词字段默认是position,其他的默认是docs;
"norms":{"enable":true,"loading":"lazy"}//分词字段默认配置,不分词字段:默认{"enable":false},存储长度因子和索引时boost,建议对需要参与评分字段使用,会额外增加内存消耗量;
"null_value":"NULL"//设置一些缺失字段的初始化值,只有string可以使用,分词字段的null值也会被分词;
"position_increament_gap":0//影响距离查询或近似查询,可以设置在多值字段的数据上火分词字段上,查询时可指定slop间隔,默认值是100;
"search_analyzer":"ik"//设置搜索时的分词器,默认跟ananlyzer是一致的,比如index时用standard+ngram,搜索时用standard用来完成自动提示功能;
"similarity":"BM25"//默认是TF/IDF算法,指定一个字段评分策略,仅仅对字符串型和分词类型有效;
"term_vector":"no"//默认不存储向量信息,支持参数yes(term存储),with_positions(term+位置),with_offsets(term+偏移量),with_positions_offsets(term+位置+偏移量)对快速高亮fast vector highlighter能提升性能,但开启又会加大索引体积,不适合大数据量用;
在数据异步接入步骤S140中,通过RabbitMq消息中间件接入数据,并与所述Elasticsearch集群异步更新。
本示例实施方式中,所述数据异步接入步骤还包括:
通过数据同步接口接收数据更新请求后,将所述更新数据暂存在RabbitMq消息中间件中;
通过后端通过守护进程将所述消息中间件RabbitMq中数据批量写入到所述elasticsearch集群中。
本示例实施方式中,接入站内商品数据,通过RabbitMq消息中间件将站内数据异步写到elasticsearch集群。
后端对外提供一个商品同步接口,各业务将各业务数据按照接口约定,将商品数据更新请求提交到http rest商品同步接口中,商品同步接口不实时做elasticsearch的入库操作,立即返回提交成功结果,将各业务提交来的业务数据暂时存放到消息中间件RabbitMq队列中去,这种架构的优点在于通过异步方式去同步数据,完成业务的解耦,提高数据同步的吞吐量,加快相应速度。
后端通过守护进程去消息中间件RabbitMq中消费数据批量写入到elasticsearch中,后端多进程消费消费队列提升数据同步速度,同时后端提供监控程序对于RabbitMq中的消息个数进行分钟级别监控达到消息队列堆积可以及时告警,并自动增加消费进行加速消费。
进一步的:
后端对外提供一个商品同步接口/search/update,支持post和get请求两种方式,请求参数支持商品ID+商品信息等参数。
业务方将商品数据的增删改请求通过http rest商品同步接口中,得到提交成功的返回结果。
发起商品同步请求:Curl-XPOST“{商品同步接口url}”-d“article_id={商品id}&channel={频道标识}”。
返回结果:
{
"ret":0,
"message":"同步成功",
}
商品同步接口将业务方提交来的商品数据send到RabbitMq消费队列,后端启动多个守护进程对消费队列中的消息进行消费并写入到elasticsearch中,写入成功后移出消费队列。
后端通过心跳监控任务,监控RabbitMq消费队列中的消息个数来考量是否增减消费进程。
在查询语句构建步骤S150中,根据所述接入数据确定匹配字段及查询排序策略。
本示例实施方式中,所述查询语句构建步骤还包括:
根据查询字段数量匹配查询规则;
设置查询返回的数量;
配置指定查询范围;
通过对子查询结果评分确定查询排序策略。
本示例实施方式中,根据站内数据确定匹配字段及查询排序策略的具体方式如下:
(1).term查询和terms查询
term query会去倒排索引中寻找确切的term,它并不知道分词器的存在。这种查询适合keyword、numeric、date。
term:查询某个字段里含有某个关键词的文档;
GET/lib3/user/_search/{"query":{"term":{"interests":"changge"}}}
terms:查询某个字段里含有多个关键词的文档;
GET/lib3/user/_search{"query":{"terms":{"interests":["hejiu","changge"]}}}
(2).控制查询返回的数量
from:从哪一个文档开始size:需要的个数
GET/lib3/user/_search{"from":0,"size":2,"query":{"terms":{"interests":["hejiu","changge"]}}}
(3).match查询
match query知道分词器的存在,会对filed进行分词操作,然后再查询;
GET/lib3/user/_search{"query":{"match":{"name":"zhaoliu"}}}
GET/lib3/user/_search{"query":{"match":{"age":20}}}
match_all:查询所有文档;
GET/lib3/user/_search{"query":{"match_all":{}}}
multi_match:可以指定多个字段;
GET/lib3/user/_search{"query":{"multi_match":{"query":"lvyou","fields":["interests","name"]}}}
match_phrase:短语匹配查询;
ElasticSearch引擎首先分析(analyze)查询字符串,从分析后的文本中构建短语查询,这意味着必须匹配短语中的所有分词,并且保证各个分词的相对位置不变:
GET lib3/user/_search{"query":{
"match_phrase":{
"interests":"duanlian,shuoxiangsheng"}}}
(4).排序
使用sort实现排序:desc:降序,asc升序;
GET/lib3/user/_search{"query":{"match_all":{}},"sort":[{"age":{"order":"asc"}}]
GET/lib3/user/_search{"query":{"match_all":{}},"sort":[{"age":{"order":"desc"}}]
}
(4).bool查询
接收以下参数:
must:文档必须匹配这些条件才能被包含进来;
must_not:文档必须不匹配这些条件才能被包含进来;
should:如果满足这些语句中的任意语句,将增加_score,否则,无任何影响。它们主要用于修正每个文档的相关性得分;
filter:必须匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。
相关性得分是如何组合的。每一个子查询都独自地计算文档的相关性得分。一旦他们的得分被计算出来,bool查询就将这些得分进行合并并且返回一个代表整个布尔操作的得分。
下面的查询用于查找title字段匹配how to make millions并且不被标识为spam的文档。那些被标识为starred或在2014之后的文档,将比另外那些文档拥有更高的排名。如果两者都满足,那么它排名将更高:
{"bool":{"must":{"match":{"title":"how to make millions"}},"must_not":{"match":{"tag":"spam"}},"should":[{"match":{"tag":"starred"}},{"range":{"date":{"gte":"2014-01-01"}}}]}}
如果没有must语句,那么至少需要能够匹配其中的一条should语句。但,如果存在至少一条must语句,则对should语句的匹配没有要求。如果我们不想因为文档的时间而影响得分,可以用filter语句来重写前面的例子:
{"bool":{"must":{"match":{"title":"how to make millions"}},"must_not":{"match":{"tag":"spam"}},"should":[{"match":{"tag":"starred"}}],"filter":{"range":{"date":{"gte":"2014-01-01"}}}}}
通过将range查询移到filter语句中,我们将它转成不评分的查询,将不再影响文档的相关性排名。由于它现在是一个不评分的查询,可以使用各种对filter查询有效的优化手段来提升性能。
bool查询本身也可以被用做不评分的查询。简单地将它放置到filter语句中并在内部构建布尔逻辑:
{"bool":{"must":{"match":{"title":"how to make millions"}},"must_not":{"match":{"tag":"spam"}},"should":[{"match":{"tag":"starred"}}],"filter":{"bool":{"must":[{"range":{"date":{"gte":"2014-01-01"}}},{"range":{"price":{"lte":29.99}}}],"must_not":[{"term":{"category":"ebooks"}}]}}}}
(5).constant_score查询
它将一个不变的常量评分应用于所有匹配的文档。它被经常用于你只需要执行一个filter而没有其它查询(例如,评分查询)的情况下。
{"constant_score":{"filter":{"term":{"category":"ebooks"}}}}
term查询被放置在constant_score中,转成不评分的filter。这种方式可以用来取代只有filter语句的bool查询。
需要说明的是,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
此外,在本示例实施例中,还提供了一种基于Elasticsearch的分布式搜索系统搭建装置。参照图2所示,该基于Elasticsearch的分布式搜索系统搭建装置200可以包括:Elasticsearch集群搭建模块210、中文分词器插件配置模块220、创建索引模块230、数据异步接入模块240以及查询语句构建模块250。其中:
Elasticsearch集群搭建模块210,用于配置Java环境并安装稳定版本的Elasticsearch集群;
中文分词器插件配置模块220,用于在所述Elasticsearch集群中配置中文分词器插件;
创建索引模块230,用于创建索引并确定所述索引中各字段的数据类型;
数据异步接入模块240,用于通过RabbitMq消息中间件接入数据,并与所述Elasticsearch集群异步更新;
查询语句构建模块250,用于根据所述接入数据确定匹配字段及查询排序策略。
上述中各基于Elasticsearch的分布式搜索系统搭建装置模块的具体细节已经在对应的基于Elasticsearch的分布式搜索系统搭建方法中进行了详细的描述,因此此处不再赘述。
应当注意,尽管在上文详细描述中提及了基于Elasticsearch的分布式搜索系统搭建装置200的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
此外,在本公开的示例性实施例中,还提供了一种能够实现上述方法的电子设备。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施例、完全的软件实施例(包括固件、微代码等),或硬件和软件方面结合的实施例,这里可以统称为“电路”、“模块”或“系统”。
下面参照图3来描述根据本发明的这种实施例的电子设备300。图3显示的电子设备300仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图3所示,电子设备300以通用计算设备的形式表现。电子设备300的组件可以包括但不限于:上述至少一个处理单元310、上述至少一个存储单元320、连接不同系统组件(包括存储单元320和处理单元310)的总线330、显示单元340。
其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元310执行,使得所述处理单元310执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施例的步骤。例如,所述处理单元310可以执行如图1中所示的步骤S110至步骤S150。
存储单元320可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)3201和/或高速缓存存储单元3202,还可以进一步包括只读存储单元(ROM)3203。
存储单元320还可以包括具有一组(至少一个)程序模块3205的程序/实用工具3204,这样的程序模块3205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线330可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备300也可以与一个或多个外部设备370(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备300交互的设备通信,和/或与使得该电子设备300能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口350进行。并且,电子设备300还可以通过网络适配器360与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器360通过总线330与电子设备300的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备300使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施例的描述,本领域的技术人员易于理解,这里描述的示例实施例可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施例的方法。
在本公开的示例性实施例中,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施例中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施例的步骤。
参考图4所示,描述了根据本发明的实施例的用于实现上述方法的程序产品400,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
此外,上述附图仅是根据本发明示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施例。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限。
Claims (8)
1.一种基于Elasticsearch的分布式搜索系统搭建方法,其特征在于,所述方法包括:
Elasticsearch集群搭建步骤,配置Java环境并安装稳定版本的Elasticsearch集群;
中文分词器插件配置步骤,在所述Elasticsearch集群中配置中文分词器插件;
创建索引步骤,创建索引并确定所述索引中各字段的数据类型;
数据异步接入步骤,通过RabbitMq消息中间件接入数据,并与所述Elasticsearch集群异步更新;
查询语句构建步骤,根据所述接入数据确定匹配字段及查询排序策略。
2.根据权利要求1所述的方法,其特征在于,所述Elasticsearch集群搭建步骤中,通过配置JDK环境变量实现Java环境的配置。
3.根据权利要求1所述的方法,其特征在于,所述创建索引步骤还包括:
根据创建索引确定的所述各字段的数据属性;及
根据创建索引确定的所述各字段的数据类型包括但不限于核心数据类型与复杂数据类型。
4.根据权利要求1所述的方法,其特征在于,所述数据异步接入步骤还包括:
通过数据同步接口接收数据更新请求后,将所述更新数据暂存在RabbitMq消息中间件中;
通过后端通过守护进程将所述消息中间件RabbitMq中数据批量写入到所述elasticsearch集群中。
5.根据权利要求1所述的方法,其特征在于,所述查询语句构建步骤还包括:
根据查询字段数量匹配查询规则;
设置查询返回的数量;
配置指定查询范围;
通过对子查询结果评分确定查询排序策略。
6.一种基于Elasticsearch的分布式搜索系统搭建装置,其特征在于,所述装置包括:
Elasticsearch集群搭建模块,用于配置Java环境并安装稳定版本的Elasticsearch集群;
中文分词器插件配置模块,用于在所述Elasticsearch集群中配置中文分词器插件;
创建索引模块,用于创建索引并确定所述索引中各字段的数据类型;
数据异步接入模块,用于通过RabbitMq消息中间件接入数据,并与所述Elasticsearch集群异步更新;
查询语句构建模块,用于根据所述接入数据确定匹配字段及查询排序策略。
7.一种电子设备,其特征在于,包括
处理器;以及
存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时实现根据权利要求1至5中任一项所述的方法。
8.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现根据权利要求1至5中任一项所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010101469.XA CN111400362A (zh) | 2020-02-19 | 2020-02-19 | 一种基于Elasticsearch的分布式搜索系统搭建方法以及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010101469.XA CN111400362A (zh) | 2020-02-19 | 2020-02-19 | 一种基于Elasticsearch的分布式搜索系统搭建方法以及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111400362A true CN111400362A (zh) | 2020-07-10 |
Family
ID=71432657
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010101469.XA Pending CN111400362A (zh) | 2020-02-19 | 2020-02-19 | 一种基于Elasticsearch的分布式搜索系统搭建方法以及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111400362A (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111858833A (zh) * | 2020-07-29 | 2020-10-30 | 广州海鹚网络科技有限公司 | 一种异步索引方法、装置、计算机设备和存储介质 |
CN111914126A (zh) * | 2020-07-22 | 2020-11-10 | 浙江乾冠信息安全研究院有限公司 | 用于索引的网络安全大数据的处理方法、设备及存储介质 |
CN111966882A (zh) * | 2020-09-14 | 2020-11-20 | 量子数聚(北京)科技有限公司 | 数据导入方法、装置、系统及计算机可读存储介质 |
CN112017786A (zh) * | 2020-07-02 | 2020-12-01 | 厦门市妇幼保健院(厦门市计划生育服务中心) | 基于es的自定义分词器 |
CN113138792A (zh) * | 2021-04-23 | 2021-07-20 | 杭州安恒信息技术股份有限公司 | 一种Elasticsearch版本迁移方法、装置和存储介质 |
CN113157734A (zh) * | 2021-04-20 | 2021-07-23 | 平安银行股份有限公司 | 基于搜索框架的数据处理方法、装置、设备及存储介质 |
CN113190644A (zh) * | 2021-05-24 | 2021-07-30 | 浪潮软件科技有限公司 | 热更新搜索引擎分词字典的方法及装置 |
CN113360706A (zh) * | 2021-06-20 | 2021-09-07 | 杭州登虹科技有限公司 | 一种基于对象存储与Elasticsearch的视频Timeline存储方法 |
CN113486138A (zh) * | 2021-07-20 | 2021-10-08 | 北京明略软件系统有限公司 | 基于Elasticsearch的检索方法、系统和计算机可读存储介质 |
CN116431734A (zh) * | 2023-06-12 | 2023-07-14 | 成都信息工程大学 | 一种es数据实时同步方法、系统及存储介质 |
CN116492690A (zh) * | 2023-04-13 | 2023-07-28 | 广州炫动信息科技有限公司 | 游戏数据处理方法、系统及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107329987A (zh) * | 2017-06-02 | 2017-11-07 | 广州启辰电子科技有限公司 | 一种基于mongo数据库的搜索系统 |
CN110543517A (zh) * | 2019-08-26 | 2019-12-06 | 汉纳森(厦门)数据股份有限公司 | 一种基于Elasticsearch实现海量数据复杂查询方法、装置及介质 |
US20200050638A1 (en) * | 2018-08-12 | 2020-02-13 | Parker Douglas Hancock | Systems and methods for analyzing the validity or infringment of patent claims |
CN110807138A (zh) * | 2019-09-10 | 2020-02-18 | 国网电子商务有限公司 | 一种搜索对象类别的确定方法及装置 |
-
2020
- 2020-02-19 CN CN202010101469.XA patent/CN111400362A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107329987A (zh) * | 2017-06-02 | 2017-11-07 | 广州启辰电子科技有限公司 | 一种基于mongo数据库的搜索系统 |
US20200050638A1 (en) * | 2018-08-12 | 2020-02-13 | Parker Douglas Hancock | Systems and methods for analyzing the validity or infringment of patent claims |
CN110543517A (zh) * | 2019-08-26 | 2019-12-06 | 汉纳森(厦门)数据股份有限公司 | 一种基于Elasticsearch实现海量数据复杂查询方法、装置及介质 |
CN110807138A (zh) * | 2019-09-10 | 2020-02-18 | 国网电子商务有限公司 | 一种搜索对象类别的确定方法及装置 |
Non-Patent Citations (2)
Title |
---|
王伟;魏乐;刘文清;舒红平;: "基于ElasticSearch的分布式全文搜索系统" * |
郝强;高占春;: "基于SolrCloud的网络百科检索服务的实现" * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112017786A (zh) * | 2020-07-02 | 2020-12-01 | 厦门市妇幼保健院(厦门市计划生育服务中心) | 基于es的自定义分词器 |
CN111914126A (zh) * | 2020-07-22 | 2020-11-10 | 浙江乾冠信息安全研究院有限公司 | 用于索引的网络安全大数据的处理方法、设备及存储介质 |
CN111858833A (zh) * | 2020-07-29 | 2020-10-30 | 广州海鹚网络科技有限公司 | 一种异步索引方法、装置、计算机设备和存储介质 |
CN111966882A (zh) * | 2020-09-14 | 2020-11-20 | 量子数聚(北京)科技有限公司 | 数据导入方法、装置、系统及计算机可读存储介质 |
CN113157734B (zh) * | 2021-04-20 | 2022-10-11 | 平安银行股份有限公司 | 基于搜索框架的数据处理方法、装置、设备及存储介质 |
CN113157734A (zh) * | 2021-04-20 | 2021-07-23 | 平安银行股份有限公司 | 基于搜索框架的数据处理方法、装置、设备及存储介质 |
CN113138792A (zh) * | 2021-04-23 | 2021-07-20 | 杭州安恒信息技术股份有限公司 | 一种Elasticsearch版本迁移方法、装置和存储介质 |
CN113190644A (zh) * | 2021-05-24 | 2021-07-30 | 浪潮软件科技有限公司 | 热更新搜索引擎分词字典的方法及装置 |
CN113190644B (zh) * | 2021-05-24 | 2023-01-13 | 浪潮软件科技有限公司 | 热更新搜索引擎分词字典的方法及装置 |
CN113360706A (zh) * | 2021-06-20 | 2021-09-07 | 杭州登虹科技有限公司 | 一种基于对象存储与Elasticsearch的视频Timeline存储方法 |
CN113486138A (zh) * | 2021-07-20 | 2021-10-08 | 北京明略软件系统有限公司 | 基于Elasticsearch的检索方法、系统和计算机可读存储介质 |
CN116492690A (zh) * | 2023-04-13 | 2023-07-28 | 广州炫动信息科技有限公司 | 游戏数据处理方法、系统及存储介质 |
CN116431734A (zh) * | 2023-06-12 | 2023-07-14 | 成都信息工程大学 | 一种es数据实时同步方法、系统及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111400362A (zh) | 一种基于Elasticsearch的分布式搜索系统搭建方法以及装置 | |
US11853334B2 (en) | Systems and methods for generating and using aggregated search indices and non-aggregated value storage | |
US10073875B2 (en) | System and method of search indexes using key-value attributes to searchable metadata | |
US11449564B2 (en) | System and method for searching based on text blocks and associated search operators | |
US8756216B1 (en) | Scalable tree builds for content descriptor search | |
US20120290575A1 (en) | Mining intent of queries from search log data | |
CN103092943B (zh) | 一种广告调度的方法和广告调度服务器 | |
CN109522341B (zh) | 实现基于sql的流式数据处理引擎的方法、装置、设备 | |
US20230147941A1 (en) | Method, apparatus and device used to search for content | |
CN108334951B (zh) | 针对决策树的节点的数据的预统计 | |
US8352483B1 (en) | Scalable tree-based search of content descriptors | |
US8745062B2 (en) | Systems, methods, and computer program products for fast and scalable proximal search for search queries | |
CN104428769A (zh) | 提供文本阅读器的信息 | |
JP2020513128A (ja) | トピック構造化方法、検索結果提供方法、コンピュータプログラムおよびトピック構造化システム | |
US11087098B2 (en) | Computer systems for classifying multilingual text | |
US20170124090A1 (en) | Method of discovering and exploring feature knowledge | |
Kumar | Apache Solr search patterns | |
Akdogan | Elasticsearch Indexing | |
US9223833B2 (en) | Method for in-loop human validation of disambiguated features | |
JP2023015275A (ja) | 観測情報処理方法、装置、電子機器、記憶媒体及びコンピュータプログラム | |
Kuć et al. | ElasticSearch server | |
US20170270127A1 (en) | Category-based full-text searching | |
CN114020864A (zh) | 搜索结果的展示方法、装置及设备 | |
WO2017175247A1 (en) | Method and system for generating content from search results rendered by a search engine | |
US20170177632A1 (en) | Method and apparatus for saving web content |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200710 |
|
RJ01 | Rejection of invention patent application after publication |