ElasticSearch 基本操作
ElasticSearch 基本操作
ES中最基本的增删改查操作,这里做个汇总,以后可以看一下。查找部分还有很多没有写出来,内容是在太多了。
增
1. 增加索引
增加索引my_store
,字段有price
,productID
curl -X PUT "localhost:9200/my_store" -H 'Content-Type: application/json' -d'
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
}
"mappings" : {
"products" : {
"properties" : {
"price": {
"type": "keyword"
},
"productID" : {
"type" : "keyword"
}
}
}
}
}'
2. 增加文档
指定ID
curl -X PUT "localhost:9200/my_store/products/1" -H 'Content-Type: application/json' -d'
{
"price": 20,
"productID": "XHDK-A-1293-#fJ3"
}'
不指定ID
curl -X POST "localhost:9200/my_store/products/" -H 'Content-Type: application/json' -d'
{
"price": 20,
"productID": "XHDK-A-1293-#fJ3"
}'
删
1. 删除文档
curl -X DELETE "localhost:9200/my_store/products/1"
2. 删除索引
curl -X DELETE "localhost:9200/my_store"
改
修改id为1的文档的 price 为 50
curl -X POST "localhost:9200/my_store/products/1/_update" -H 'Content-Type: application/json' -d'
{
"docs": {
"price": 50
}
}'
查
这里只是粗略介绍
1. 通过 _id 查询
curl -X GET "localhost:9200/my_store/products/1"
2. 条件查询
查询该索引下所有的记录
curl -X POST "localhost:9200/my_store/_search" -H "Content-Type:application/json" -d '
{
"query": {
"match_all": {}
}
}'
限制条数(从第一条开始,显示一条)
curl -X POST "localhost:9200/my_store/_search" -H "Content-Type:application/json" -d '
{
"query": {
"match_all": {}
},
"from": 1,
"size": 1
}'
限定条件
curl -X POST "localhost:9200/my_store/_search" -H "Content-Type:application/json" -d '
{
"query": {
"match": {
"price": 30
}
}
}'
设定升降序
curl -X POST "localhost:9200/my_store/_search" -H "Content-Type:application/json" -d '
{
"query": {
"match": {
"price": 30
}
},
"sort": [
{"productID": {"order": "desc"}}
]
}'
3. 聚合查询
查询
curl -X POST "localhost:9200/my_store/_search" -H "Content-Type:application/json" -d '
{
"aggs": {
"group_by_word_count": {
"terms": {
"field": "word_count"
}
},
"group_by_publish_date": {
"terms": {
"field": "publish_date"
}
}
}
}'
计算
curl -X POST "localhost:9200/my_store/_search" -H "Content-Type:application/json" -d '
{
"aggs": {
"grades_word_count": {
"stats": {
"field": "word_count"
}
}
}
}'
高级查询
-
子条件查询 特定字段查询所指特定值
-
Query context
在查询过程中,除了判断文档是否满足查询条件外,ES还会计算一个
_score
来标识匹配的程度,旨在判断目标文档和查询条件匹配的有多好。- 全文本查询 针对文本类型数据
- 字段级别查询 针对结构化数据(数字,日期等)
-
Filter context
在查询过程中,指判断该文档是否满足条件,只有 YES 或 NO。
-
-
符合条件查询 以一定的逻辑组合子条件查询
1. query
1.1. 模糊匹配 - 非结构化数据查询
curl -X POST "localhost:9200/my_store/_search" -H "Content-Type:application/json" -d '
{
"query": {
"match": {
"price": 30
}
}
}'
缺陷:查询组合词的时候会被自动拆分,比如说ElasticSearch入门
会被拆分为ElasticSearch
和入门
1.2. 习语匹配 - 非结构化数据查询
curl -X POST "localhost:9200/my_store/_search" -H "Content-Type:application/json" -d '
{
"query": {
"match_phrase": {
"title": "ElasticSearch入门"
}
}
}'
1.3. 多字段匹配 - 非结构化数据查询
curl -X POST "localhost:9200/my_store/_search" -H "Content-Type:application/json" -d '
{
"query": {
"multi_match": {
"query": "ElasticSearch",
"fields": ["title", "content"]
}
}
}'
1.4. 语法匹配 - 非结构化数据查询
curl -X POST "localhost:9200/my_store/_search" -H "Content-Type:application/json" -d '
{
"query": {
"query_string": {
"query": "ElasticSearch AND 入门"
}
}
}'
curl -X POST "localhost:9200/my_store/_search" -H "Content-Type:application/json" -d '
{
"query": {
"query_string": {
"query": "(ElasticSearch AND 入门) OR Python"
}
}
}'
curl -X POST "localhost:9200/my_store/_search" -H "Content-Type:application/json" -d '
{
"query": {
"query_string": {
"query": "ElasticSearch OR 入门"
"fields": ["title", "content"]
}
}
}'
1.5. 字段查询 - 结构化数据查询
curl -X POST "localhost:9200/my_store/_search" -H "Content-Type:application/json" -d '
{
"query": {
"term": {
"title": "ElasticSearch"
}
}
}'
2. filter
和 query 最大的区别在于没有_score
了,并且会对结果进行缓存。
curl -X POST "localhost:9200/my_store/_search" -H "Content-Type:application/json" -d '
{
"query": {
"bool": {
"filter": {
"term": {
"price": 30
}
}
}
}
}'
3. 复合查询
3.1. 固定分数查询
curl -X POST "localhost:9200/my_store/_search" -H "Content-Type:application/json" -d '
{
"query": {
"constant_score": {
"filter": {
"match": {
"title": "ElasticSearch"
}
},
"boost": 2
}
}
}'
3.2. 布尔查询
-
should:相当于sql中的 or
curl -X POST "localhost:9200/my_store/_search" -H "Content-Type:application/json" -d ' { "query": { "bool": { "should": [ {"match": {"title": "ElasticSearch"}}, {"match": {"content": "ES"}} ] } } }'
-
must:相当于sql中的 is
curl -X POST "localhost:9200/my_store/_search" -H "Content-Type:application/json" -d ' { "query": { "bool": { "must": [ {"match": {"title": "ElasticSearch"}}, {"match": {"content": "ES"}} ] } } }'
-
must_not:相当于sql中的 is not
curl -X POST "localhost:9200/my_store/_search" -H "Content-Type:application/json" -d ' { "query": { "bool": { "must_not": { "term": { "title": "ElasticSearch" } } } } }'