ElasticSearch学习6
复杂查询
test3索引中的内容
①查询匹配
match
:匹配(会使用分词器解析(先分析文档,然后进行查询))_source
:过滤字段(就是查询哪些字段)sort
:排序form
、size
分页(form表示从第几页开始,size表示每页展示多少条数据)
// 查询匹配
GET / blog / user / _search {
"query": {
"match": {
"name": "流"
}
},
"_source": ["name", "desc"],
"sort": [{
"age": {
"order": "asc"
}
}],
"from": 0,
"size": 1
}
②多条件查询(bool)
- must 相当于 and
- should 相当于 or
- must_not 相当于 not (... and ...)
- filter 过滤
/// bool 多条件查询
must <==> and
should <==> or
must_not <==> not (... and ...)
filter数据过滤
boost
minimum_should_match
GET / blog / user / _search {
"query": {
"bool": {
"must": [{
"match": {
"age": 3
}
}, {
"match": {
"name": "流"
}
}],
"filter": {
"range": {
"age": {
"gte": 1,
"lte": 3
}
}
}
}
}
}
③匹配数组(满足数组中的一个值就会被查询出来)
- 貌似不能与其它字段一起使用
- 可以多关键字查(空格隔开)— 匹配字段也是符合的
match
会使用分词器解析(先分析文档,然后进行查询)- 搜词
// 匹配数组 貌似不能与其它字段一起使用
// 可以多关键字查(空格隔开)
// match 会使用分词器解析(先分析文档,然后进行查询)
GET / blog / user / _search {
"query": {
"match": {
"desc": "年龄 牛 大"
}
}
}
④精确查询
term
直接通过 倒排索引 指定词条查询- 适合查询 number、date、keyword ,不适合text
// 精确查询(必须全部都有,而且不可分,即按一个完整的词查询)
// term 直接通过 倒排索引 指定的词条 进行精确查找的
GET / blog / user / _search {
"query": {
"term": {
"desc": "年 "
}
}
}
⑤text和keyword
- text:
-
- 支持分词,全文检索、支持模糊、精确查询,不支持聚合,排序操作;
- text类型的最大支持的字符长度无限制,适合大字段存储;
- keyword:
-
- 不进行分词,直接索引、支持模糊、支持精确匹配,支持聚合、排序操作。
- keyword类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置ignore_above指定自持字符长度,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。
// 测试keyword和text是否支持分词
// 设置索引类型
PUT / test {
"mappings": {
"properties": {
"text": {
"type": "text"
},
"keyword": {
"type": "keyword"
}
}
}
}
// 设置字段数据
PUT / test / _doc / 1 {
"text": "测试keyword和text是否支持分词",
"keyword": "测试keyword和text是否支持分词"
}
// text 支持分词
// keyword 不支持分词
GET / test / _doc / _search {
"query": {
"match": {
"text": "测试"
}
}
}
// 查的到
GET / test / _doc / _search {
"query": {
"match": {
"keyword": "测试"
}
}
}
// 查不到,必须是 "测试keyword和text是否支持分词" 才能查到
GET _analyze {
"analyzer": "keyword",
"text": ["测试liu"]
}
// 不会分词,即 测试liu
GET _analyze {
"analyzer": "standard",
"text": ["测试liu"]
}
// 分为 测 试 liu
GET _analyze {
"analyzer": "ik_max_word",
"text": ["测试liu"]
} // 分为 测试 liu
⑥高亮查询
/// 高亮查询
GET blog / user / _search {
"query": {
"match": {
"name": "流"
}
},
"highlight": {
"fields": {
"name": {}
}
}
}
// 自定义前缀和后缀
GET blog / user / _search {
"query": {
"match": {
"name": "流"
}
},
"highlight": {
"pre_tags": "<p class='key' style='color:red'>",
"post_tags": "</p>",
"fields": {
"name": {}
}
}
}