阿债的方寸天地 2020-04-29
全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。
它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。
Elastic会索引所有字段,查询就是查索引。
1,索引(Index)是Elastic数据管理的顶层单位,一个索引就是一个数据库。索引名称必须小写。
2,Index 里的记录称为文档(Document),多条Document组成一个Index,Document是Json格式。
3,Document文档可以分组(Type),是虚拟的逻辑分组,用来过滤Document
0,
显示所有Index:curl -X GET ‘http://localhost:9200/_cat/indices?v‘
显示所有Type:curl ‘localhost:9200/_mapping?pretty=true‘
1,
新建Index,向Elastic服务器发送PUT请求,名为weather:curl -X PUT ‘localhost:9200/weather’
删除Index,发送DELETE请求:curl -X DELETE ‘localhost:9200/weather’
2,
新增记录,向指定Index/Type发请求:
# 向accounts索引Type组中新增记录 # 方式一:发送PUT请求,要指定该条记录的ID,下例中为1,ID不一定是数字,任何字符串都可以。 curl -X PUT ‘localhost:9200/accounts/person/1‘ -H ‘Content-Type: application/json‘ -d ‘ { "user": "张三", "title": "工程师", "desc": "数据库管理" }‘ # 方式二:发送POST请求,ID会随机创建,和方式一等价。 curl -X POST ‘localhost:9200/accounts/person‘ -H ‘Content-Type: application/json‘ -d ‘ { "user": "张三", "title": "工程师", "desc": "数据库管理" }‘
删除记录,发送DELETE请求,删除accounts索引person组中ID等于1的记录:curl -X DELETE ‘localhost:9200/accounts/person/1‘
更新记录,发送PUT请求,更新ID等于1的记录:
curl -X PUT ‘localhost:9200/accounts/person/1‘ -H ‘Content-Type: application/json‘ -d ‘ { "user" : "张三", "title" : "工程师", "desc" : "数据库管理,软件开发" }‘ # 更新返回的数据中,该记录version从1变为2,记录更新次数
查看记录,发送GET请求,accounts索引person分组ID为1的记录:
curl ‘localhost:9200/accounts/person/1?pretty=true‘ # pretty=true以易读的格式返回。ID不存在就查不到数据。
3,
数据查询
查询所有记录,GET请求:
curl ‘localhost:9200/accounts/person/_search‘ # response中:took表示耗时(毫秒)、time_out表示是否超时、hits表示命中的记录
全文搜索
# 查询accounts索引person组的记录,条件是desc字段包含”软件“二字 curl ‘localhost:9200/accounts/person/_search‘ -H ‘Content-Type: application/json‘ -d ‘ { "query" : { "match" : { "desc" : "软件" }} }‘ # Elastic默认返回10条记录,size字段可设置返回记录条数,from字段表示位移,从哪个位置开始,默认从0开始 #{ # "query" : { "match" : { "desc" : "软件" }}, # "from": 1, # "size": 5 #}
逻辑运算
有多个条件,默认or
# 软件 or 系统 curl ‘localhost:9200/accounts/person/_search‘ -H ‘Content-Type: application/json‘ -d ‘ { "query" : { "match" : { "desc" : "软件 系统" }} }‘
要执行and
,必须使用布尔查询
# 软件 and 系统 curl ‘localhost:9200/accounts/person/_search‘ -H ‘Content-Type: application/json‘ -d ‘ { "query": { "bool": { "must": [ { "match": { "desc": "软件" } }, { "match": { "desc": "系统" } } ] } } }‘
另外一部分,则需要先做聚类、分类处理,将聚合出的分类结果存入ES集群的聚类索引中。数据处理层的聚合结果存入ES中的指定索引,同时将每个聚合主题相关的数据存入每个document下面的某个field下。