ElasticSearch外围详解
文档
元数据(metadata)
- _index 索引
- _type 文档类型
- _id 惟一标识符(默认32位)
查问响应
丑化pertty : 使得返回的json更易查看
GET {查问url}?pretty
指定响应字段 : _source
GET /haoke/user/1005?_source=id,name
只返回指定字段 : _source?source=
GET /haoke/user/1005/_source?_source=id,name
判断文档是否存在
HEAD /{索引}/{类型}/{id}
批量操作
批量查问 _mget
POST /{索引}/{类型}/_mget
{ "ids":["AXqP5R4PXV22eQAormWv","1111"]}
found:false 示意查问后果不存在
批量增、删、改 _bulk
POST /{索引}/{类型}/_bulk
/* 插入 */{"create":{"_index":"haoke","_type":"user","_id":2001}}{"id":2001,"name":"name1","age": 20,"sex": "男"}{"create":{"_index":"haoke","_type":"user","_id":2002}}{"id":2002,"name":"name2","age": 20,"sex": "男"}//最初一行须要有回车/* 删除 */{"delete":{"_index":"haoke","_type":"user","_id":2001}}{"delete":{"_index":"haoke","_type":"user","_id":2002}}//最初一行须要有回车
分页
size : 后果数,默认10
from : 跳过开始的后果数,默认0
GET /{索引}/{类型}/_search?size=10&from=0
ES 分页会在每个分片生成一次排序后果,最初集中起来汇总排序,因而分页太深或申请太多会影响性能
映射
text :须要被全文搜寻(分词)的字段,如内容,形容
keyword :结构化字段,如地址,状态,标签
创立映射
PUT /{索引}
{ "settings":{ "index":{ "number_of_shards":"2", "number_of_replicas":"0" } }, "mappings":{ "person":{ "properties":{ "name":{ "type":"text" }, "age":{ "type":"integer" }, "mail":{ "type":"keyword" }, "hobby":{ "type":"text" } } } }}
查看映射
GET /{索引}/_mapping
搜寻测试
POST /test/person/_bulk
{"create":{"_index":"test","_type":"person","_id":1}}{"id":1,"name":"听音乐","age": 20}{"create":{"_index":"test","_type":"person","_id":2}}{"id":2,"name":"玩音乐","age": 20}
POST /{索引}/{文档}/_search
{ "query":{ "match":{ "name":"音乐" } }}
结构化查问
term查问:准确匹配值。如数字,日期,布尔值
POST /{索引}/{文档}/_search{ "query":{ "term":{ "age": 20 } }}
terms查问:多条件匹配
POST /{索引}/{文档}/_search{ "query":{ "terms":{ "age": [20, 21] } }}
range查问:范畴匹配
POST /{索引}/{文档}/_search{ "query":{ "range":{ "age": { "gte" : 20 } } }}
exits查问:文档是够蕴含某字段,相当于SQL的IS NULL
条件
POST /{索引}/{文档}/_search{ "query":{ "exists":{ "field" : "hobby" } }}
match查问:规范查问,全文本查问,准确查问
POST /{索引}/{文档}/_search{ "query":{ "match":{ "name" : "音乐" } }}
bool查问:合并多个查问条件
must 多个条件齐全匹配,相当于and
must_not 多个条件相同匹配,相当于not
should 至多有一个条件匹配,相当于or
POST /{索引}/{文档}/_search{ "query":{ "bool": { "must": { "term":{ "age" : 20 } }, "must_not": { "term":{ "name" : "听音乐" } }, "should": [ { "term":{ "name" : "name1" } }, { "term":{ "name" : "name2" } } ] } }}
过滤查问:filter
POST /{索引}/{文档}/_search{ "query":{ "bool" : { "filter": { "term": { "age": 20 } } } }}
查问和过滤的比照
- 一条过滤语句会询问每个文档的字段值是否蕴含着特定值。
- 查问语句会询问每个文档的字段值与特定值的匹配水平如何。
- 一条查问语句会计算每个文档与查问语句的相关性,会给出一个相关性评分 _score,并且 依照相关性对匹 配到的文档进行排序。 这种评分形式十分实用于一个没有齐全配置后果的全文本搜寻。
- 一个简略的文档列表,疾速匹配运算并存入内存是非常不便的, 每个文档仅须要1个字节。这些缓存的过滤后果集与后续申请的联合应用是十分高效的。
- 查问语句不仅要查找相匹配的文档,还须要计算每个文档的相关性,所以一般来说查问语句要比 过滤语句更耗时,并且查问后果也不可缓存。
倡议:做准确匹配搜寻时,最好用过滤语句,因为过滤语句能够缓存数据。