{
"query": {
"match_phrase": {
"agentType" : {
"query" : "颗粒剂",
"slop" : 1
}
}
}
}
curl -H "Content-Type: application/json;charset=UTF-8" -XGET '172.16.0.15:9200/store_yh_goods_info_lot_limit_price_index/_search?pretty=true' -d '{
"from" : 0,
"size" : 10,
"query" : {
"bool" : {
"must" : [
{
"match_all" : {
"boost" : 1.0
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
"post_filter" : {
"bool" : {
"must" : [
{
"term" : {
"auditStatus" : {
"value" : 3,
"boost" : 1.0
}
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
}'
---------------------------
单模式下索引的创建,更新以及删除操作
---------------------------
---------------------------
初始化索引
创建索引之前可以对索引做初始化操作
比如指定shards数量以及replicas的数量
PUT http://localhost:9200/library/
{
“settings”:{
“index”:{
“number_of_shards”: 5,
“number_of_replicas”: 1
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
上面的number_of_replicas还可以换成:
blocks.read_only: 设为true,则当前索引只允许读,不允许写或更新
blocks.read: 设为true,则禁止读操作
blokcs.write: 设为true,则禁止写操作
blocks.metadata: 设为true,则禁止对metadata操作
---------------------------
创建一个索引
PUT /library/books/1
{
“title”: “Elasticsearch: The Definitive Guide”,
“name”: {
“first”: “Zachary”,
“last”: “Tong”
},
“publish_data”: “2015-02-06”,
“price”: “49.99”
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
---------------------------
ID可以选择不设置
POST /library/books/
{
“title”: “Elasticsearch: Blueprints”,
“name”: {
“first”: “Vineeth”,
“last”: “Mohan”
},
“publish_data”: “2015-06-06”,
“price”: “35.99”
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
---------------------------
通过ID获取文档信息
GET /library/books/1
GET /library/books/2
GET /library/books/AU_A-EDnU9duEv19TRm8
---------------------------
通过_source获取指定的字段
GET /library/books/1?_source=title
GET /library/books/1?_source=title,price
GET /library/books/1?_source
---------------------------
更新同一个ID下的文档,可以通过覆盖的方式更新
PUT /library/books/1
{
“title”: “Elasticsearch: The Definitive Guide”,
“name”: {
“first”: “Zachary”,
“last”: “Tong”
},
“publish_data”: “2015-02-06”,
“price”: “59.99”
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
-----------------------------
通过_update API的方式单独更新你想要更新的字段
POST /library/books/1/_update
{
“doc”: {
“price”: 10
}
}
- 1
- 2
- 3
- 4
- 5
- 6
------------------------------
删除一个文档的方法
DELETE /library/books/1
DELETE /library/books
DELETE /library
------------------------------
同时获取多个文档
GET /_megt{
“docs”: [
{
“_index”: “shakespeare”,
“_type”: “line”,
“_id”: 6,
“_source”: “play_name”
},
{
“_index”: “shakespeare”,
“_type”: “line”,
“_id”: 28,
“_source”: “play_name”
}
]
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
------------------------------
指定多个_source字段,数组的形式
GET /_mget
{
“docs”: [
{
“_index”: “shakespeare”,
“_type”: “line”,
“_id”: 6
},
{
“_index”: “shakespeare”,
“_type”: “line”,
“_id”: 28,
“_source”: [“play_name”, “speaker”, “text_entry”]
}
]
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
-------------------------------
获取相同index相同type下不同ID的文档
GET /shakespeare/line/_megt
{
“ids”: [“6”, “28”]
}
- 1
- 2
- 3
- 4
-------------------------------
多重模式
-------------------------------
-------------------------------
同时操作bulk
POST /library/books/_bulk
{“index”: {“_id”: 1}}
{“title”: “Elasticsearch: The Definitive Guide”, “price”: 5}
{“index”: {“_id”: 2}}
{“title”: “The ElasticSearch cookbook”, “price”: 12}
- 1
- 2
- 3
- 4
- 5
-------------------------------
还可以delete,update等操作
注意delete下面没有具体的request body
POST /library/books/_bulk
{“delete”: {“_index”: “library”, “type”: “books”, “_id”: “1”}}
{“create”: {“_index”: “music”, “_type”: “classical”, “_id”: “1”}}
{“title”: “Ave Verum Corpus”}
{“index”: {“_index”: “music”, “_type”: “classical”}}
{“title”: “Litaniac de Venerabili Altaris Sacromento”}
{“update”: {“_index”: “library”, “_type”: “books”, “_id”: “2”}}
{“doc”: {“price”: “18”}}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
-------------------------------
Mapping映射
定义类型:
定义属性:
-------------------------------
建立映射
POST /library
{
“settings”: {
“number_of_shards”: 5,
“number_of_replicas”: 1
},
“mappings”: {
“books”: {
“properties”: {
“title”: {“type”: “string”},
“name”: {“type”: “string”, “index”: “not_analyzed”},
“publish_date”: {“type”: “date”, “index”: “not_analyzed”},
“price”: {“type”, “double”},
“number”: {“type”: “integer”}
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
-------------------------------
动态映射
PUT /library
{
“mappings”: {
“books”: {
“dynamic”: “strict”,
“properties”: {
“title”: {“type”: “string”},
“name”: {“type”: “string”, “index”: “not_analyzed”},
“publish_date”: {“type”: “date”, “index”: “not_analyzed”},
“price”: {“type”, “double”},
“number”:
{
“type”: “object”,
“dynamic”: true
}
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
-------------------------------
获取某个索引的映射信息
GET /library/_mapping
- 1
-------------------------------
获取某个索引下某个type的映射信息
GET /library/_mapping/books
- 1
-------------------------------
获取这个集群内所有的映射信息
GET /_all/_mapping
- 1
-------------------------------
获取之个集群内某两个或多个type的映射信息
GET /_all/_mapping/books,bank_account
- 1
-------------------------------
更新修改Mapping映射
mapping一旦建立,就不能修改现有的字段映射
如果要推倒现有的映射,你得重新建立一个索引,然后重新定义映射
然后把之前索引里的数据导入到新建立的索引里
具体的方法:
1.给现有的索引里的数据定义一个别名,并且把现有的索引指向这个别名
2.运行:PUT /现有索引/_alias/别名A
3.新创建一个索引,定义好最新的映射
4.将别名指向新的索引,并且取消之前索引的指向
5.运行:
POST /_aliases
{
“actions”: [
{“remove”: {“index”: “现有索引名”, “alias”: “别名A”}},
{“add”: {“index”: “新建索引名”, “alias”: “别名A”}}
]
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
-------------------------------
删除映射
DELETE /library/books
DELETE /library/books/_mapping
DELETE /library/_mapping/books
- 1
- 2
- 3
-------------------------------
基本查询
-------------------------------
-------------------------------
简单的查询
指定index名以及type名的搜索
GET /library/books/_search?q=title:elasticsearch
- 1
指定index名没有type的搜索
GET /llibrary/_search?q=title:MongoDB
- 1
即没有index名也没有type名的搜索
GET /_search?q=title:elasticsearch
- 1
-------------------------------
term查询:查询某字段里有某个关键词的文档
GET /library/books/_search
{
“query”: {
“term”: {
“preview”: “elasticsearch”
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
terms查询:查询某个字段里有多个关键词的文档
minimum_match:最小匹配集:1-说明两个关键词里最少有一个
2-说明文档里这两个关键词都得存在
GET /library/books/_search
{
“query”: {
“terms”: {
“preview”: [“elasticsearch”, “book”],
“minimum_match”: 1
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
--------------------------------
控制查询返回的数量
from和size
相当于MySQL里的limit
form:从哪个结果开始返回
size:定义返回最大的结果数
GET /library/books/_search?q=title:elasticsearch
GET /library/books/_search
{
“from”: 1,
“size”: 2,
“query”: {
“term”: {
“title”: “elasticsearch”
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
-------------------------------
返回版本号_version
GET /library/books/_search
{
“version”: true,
“query”: {
“term”: {
“perview”: “elasticsearch”
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-------------------------------
match查询
match查询可接受文字,数字日期等数据类型
match跟term的区别是,match查询的时候,elasticsearch会根据你给定的字段提供合适的分析器,
而term查询不会有分析器分析的过程
GET /library/books/_search
{
“query”: {
“match”: {
“preview”: “elasticsearch”
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
通过match_all查询
查询指定索引下的所有文档
GET /library/books/_search
{
“query”: {
“match_all”: {}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
通过match_phrase查询
短语查询,slop定义的是关键词之间隔多少未知单词
GET /library/books/_search
{
“query”: {
“match_phrase”: {
“preview”: {
“query”: “elasticsearch, distributed”,
“slop”: 1
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
muti_match查询
可以指定多个字段
比如查询title和preview这两个字段里都包含Elasticsearch关键词的文档
GET /library/books/_search
{
“query”: {
“multi_match”: {
“query”: “Elasticsearch”,
“fields”: [“title”, “preview”]
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
---------------------------------
指定返回的字段
注意只能返连回store为yes的字段
GET /library/books/_search
{
“fields”: [“preview”, “title”]
“query”: {
“match”: {
“preview”: “elasticsearch”
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
---------------------------------
通过partial_fields控制加载的字段
GET /library/books/_search
{
“partial_fields”: {
“partial”: {
“include”: [“preview”],
“exclude”: [“title”, “price”]
}
},
“query”: {
“match_all”: {}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
---------------------------------
排序
通过sort把结果排序
GET /library/books/_search
{
“query”: {
“match_all”: {}
},
sort: [
{
“price”: {
“order”: “desc”
}
}
]
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
-------------------------------
prefix前缀匹配查询
GET /library/books/_search
{
“query”: {
“prefix”: {
“title”: {
“value”: “r”
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
----------------------------
range查询:范围查询
有from,to,include_lower,inculde_upper,boost这些参数
include_lower:是否包含范围的左边界,默认是true
include_upper:是否包含范围的右边界,默认是true
GET /library/books/_search
{
“query”: {
“range”: {
“publish_date”: {
“from”: “2015-01-01”,
“to”: “2015-06-30”
}
}
}
}
GET /library/books/_search
{
“query”: {
“range”: {
“price”: {
“from”: “10”,
“to”: “20”,
“include_lower”: true,
“include_upper”: false
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
------------------------------
wildcard查询:允许你使用通配符*和?不进行查询
注意:这个查询很影响性能
GET /library/books/_search
{
“query”: {
“wildcard”: {
“preview”: “rab*”
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
------------------------------
fuzzy模糊查询
value:查询的关键字
boost:设置查询的权值,默认为1.0
min_similarity:设置匹配的最小相似度
默认值为0.5; 对于字符串,取值为0-1; 对于数值,取值可能大于1; 对于日期型,取值为1d,2d,1m这样,1d就代表一天
prefix_length: 指明区分项的共同前缀长度,默认是0
max_expansions:指明查询中的词项可扩展的数目,默认可以无限大
GET /library/books/_search
{
“query”: {
“fuzzy”: {
“preview”: {
“value”: “rabit”,
“min_similarity”: 0.5
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
fuzzy_like_this查询
查询得到与给定内容相似的所有文档
fileds: 字段组,默认是_all
like_text: 设置关键词
ignore_tf: 设置忽略词项的频次,默认是false
max_query_terns: 指明在生成的查询中查询词项的最大数目,默认是25
min_similarity: 指明区分词项最小的相似度,默认是0.5
prefix_length: 指明区分词项共同前缀的长度,默认是0
boost: 设置权值,默认是1.0
analyze: 指明用于分析给定内容的分析器
GET /library/books/_search
{
“query”: {
“fuzzy_like_this”: {
“fields”: [“preview”],
“like_text”: “open source software”,
“min_similarity”: 0.5,
“prefix_length”: 0.2
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
fuzzy_like_this_field查询
只作用在一个字段里
其他与fuzzy_like_this功能一样
GET /library/books/_search
{
“query”: {
“fuzzy_like_this_field”: {
“preview”: {
“like_text”: “open source software”,
“min_similarity”: 0.5,
“prefix_length”: 0.2
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
more_like_this查询
fields: 定义字段组,默认是_all
like_text: 定义要查询的关键词
precent_terms_to_match: 该参数指明一个文档必须匹配多大比例的词项才被视为相似。默认值是0.3,意思是30%的比例
min_term_freq: 该参数指明在生成的查询中查询词项的最大数目,默认值25
stop_words: 该参数指明将被忽略的单词集合
min_doc_freq: 该参数指明词项应至少在多少个文档中出现才不会被忽略,默认是5
max_doc_freq: 该参数指明出现词项的最大数目,以避免词项被忽略,默认是无限大
min_word_len: 该参数指明单个单词的最大长度,高于该值的单词将被忽略,默认是无限大
max_word_len: 该参数提升每个单词的权重时使用的权值。默认是1
boost: 指明提升一个查询的权值。默认为1.0
analyer: 指定用于分析的分析器
GET /library/books/_search
{
“query”: {
“more_like_this”: {
“fields”: [“preview”],
“like_text”: “Apache open source”,
“min_term_freq”: 1,
“min_doc_freq”: 1
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
more_like_this_field查询
只作用在一个字段里
其他与more_like_this功能一样
GET /library/books/_search
{
“query”: {
“more_like_this_field” {
“preview”: {
“like_text”: “Apache open source”,
“min_trem_freq”: 1,
“min_doc_freq”: 1
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
-------------------------------
filter过滤查询
SELECT document FROM products WHERE price=20
- 1
filtered查询价格是20的商品
GET /store/products/_search
{
“query”: {
“filtered”: {
“query”: {
“match_all”: {}
},
“filter”: {
“term”: {
“price”: 20
}
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
也可以指定多个值
GET /store/products/_search
{
“query”: {
“filtered”: {
“filter”: {
“terms”: {
“price”: [10, 20]
}
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
-----------------------------
bool过滤查询,可以做组合过滤查询
SELECT product FROM products WHERE (price = 20 OR productID = “SD1002136”) AND (price != 30)
- 1
类似的,elasticsearch也有and, or, not这样的组合条件的查询方式
{
“bool”: {
“must”: [],
“should”: []’
“must_not”: []
}
- 1
- 2
- 3
- 4
- 5
- 6
must: 条件必须满足,相当于AND
should: 条件可以满足也可以不满足,相当于OR
must_not: 条件不需要满足,相当于NOT
GET /store/products/_search
{
“query”: {
“filtered”: {
“filter”: {
“bool”: {
“should”: [
{“term”: {“price”: 20}},
{“term”: {“productID”: “SD1002136”}}
],
“must_not”: {
“term”: {“price”: 30}
}
}
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
嵌套查询
SELECT document FORM products WHERE productID=”SD1002136” OR (productID=”SD4535233” AND price=30)
- 1
GET /store/products/_search
{
“query”: {
“filtered”: {
“filter”: {
“bool”: {
“should”: [
{“term”: {“productID”: “SD1002136”}},
{“bool”: {
“must”: [
{“term”: {“productID”: “SD4535233”}},
{“term”: {“price”: 30}}
]
}}
]
}
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
另外一种and, or, not查询
没有bool,直接使用and, or, not
查询价格既是10元,productID又为SD1002136的结果
GET /store/products/_search
{
“query”: {
“filtered”: {
“filter”: {
“and”:[
{
“term”: {
“productID”: “SD1002136”
}
}
]
},
“query”: {
“match_all”: {}
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
range范围过滤
SELECT document FROM products WHRE price BETWEEN 20 AND 40
- 1
gt: > 大于
lt: < 小于
gte: >= 大于等于
lte: <= 小于等于
GET /store/products/_search
{
“query”: {
“filtered”: {
“filter”: {
“range”: {
“price”: {
“gt”: 20,
“lt”: 40
}
}
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
--------------------------------
处理null空值的方法
SELECT tags FROM test WHERE tags IS NOT NULL
SELECT tags FROM test WHERE tags IS NULL
- 1
- 2
GET /test_index/test/_search
{
“query”: {
“filtered”: {
“filter”: {
“exists”: {field: “tags”}
}
}
}
}
GET /test_index/test/_search
{
“query”: {
“filtered”: {
“filter”: {
“missing”: {“field”: “tags”}
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
--------------------------------
跨索引查询
GET /_search
{
“query”: {
“indices”: {
“indices”: [library],
“query”: {
“term”: {
“title”: “elasticsearch”
}
},
“no_match_query”: {
“term”: {
“price”: 10
}
}
}
}
}