Elasticsearch的term level查询
数据准备:
# 创建索引映射
PUT idx_term_level
{
"mappings": {
"properties": {
"name": {
"type": "keyword"
},
"languages": {
"type": "keyword"
},
"matches": {
"type": "long"
}
}
}
}
POST idx_term_level/_bulk
{"index":{"_id":1}}
{"name":"张三","languages":["c++","java","php"],"matches":2}
{"index":{"_id":2}}
{"name":"李四","languages":["java","php","dotnet"],"matches":2}
{"index":{"_id":3}}
{"name":"王五","languages":["java","donet","c"],"matches":3}
{"index":{"_id":4}}
{"name":"赵六","languages":["php","c++","hive"],"matches":3,"remark":"hi world"}
{"index":{"_id":5}}
{"name":"田七","languages":["spark","pyhon","java"],"matches":3,"remark":"big data"}
term level的exists查询
exists查询:判断文档中是否存在对应的字段。
查询:
GET idx_term_level/_search
{
"query": {
"exists": {
"field": "remark"
}
}
}
结果:
{
"took" : 540,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "idx_term_level",
"_type" : "_doc",
"_id" : "4",
"_score" : 1.0,
"_source" : {
"name" : "赵六",
"languages" : [
"php",
"c++",
"hive"
],
"matches" : 3,
"remark" : "hi world"
}
},
{
"_index" : "idx_term_level",
"_type" : "_doc",
"_id" : "5",
"_score" : 1.0,
"_source" : {
"name" : "田七",
"languages" : [
"spark",
"pyhon",
"java"
],
"matches" : 3,
"remark" : "big data"
}
}
]
}
}
term level的ids查询
ids查询:通过 _id 批量查询
查询:
GET idx_term_level/_search
{
"query": {
"ids": {
"values": [1,4]
}
}
}
结果:
{
"took" : 30,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "idx_term_level",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"name" : "张三",
"languages" : [
"c++",
"java",
"php"
],
"matches" : 2
}
},
{
"_index" : "idx_term_level",
"_type" : "_doc",
"_id" : "4",
"_score" : 1.0,
"_source" : {
"name" : "赵六",
"languages" : [
"php",
"c++",
"hive"
],
"matches" : 3,
"remark" : "hi world"
}
}
]
}
}
term level的prefix查询
prefix查询:根据前缀来查找某个字段
查询:
GET idx_term_level/_search
{
"query": {
"prefix": {
"name": {
"value": "张"
}
}
}
}
结果:
{
"took" : 665,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "idx_term_level",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"name" : "张三",
"languages" : [
"c++",
"java",
"php"
],
"matches" : 2
}
}
]
}
}
term level的term单个词查询
单个词查询:搜索的内容不会被分词
查询:
GET idx_term_level/_search
{
"query": {
"term": {
"languages": {
"value": "php"
}
}
}
}
结果:
{
"took" : 127,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : 0.7411202,
"hits" : [
{
"_index" : "idx_term_level",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.7411202,
"_source" : {
"name" : "张三",
"languages" : [
"c++",
"java",
"php"
],
"matches" : 2
}
},
{
"_index" : "idx_term_level",
"_type" : "_doc",
"_id" : "2",
"_score" : 0.7411202,
"_source" : {
"name" : "李四",
"languages" : [
"java",
"php",
"dotnet"
],
"matches" : 2
}
},
{
"_index" : "idx_term_level",
"_type" : "_doc",
"_id" : "4",
"_score" : 0.7411202,
"_source" : {
"name" : "赵六",
"languages" : [
"php",
"c++",
"hive"
],
"matches" : 3,
"remark" : "hi world"
}
}
]
}
}
term level的terms多词查询
terms多词查询:匹配其中任意一个。
查询:
GET idx_term_level/_search
{
"query": {
"terms": {
"languages": [
"c",
"c++"
]
}
}
}
结果:
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "idx_term_level",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"name" : "张三",
"languages" : [
"c++",
"java",
"php"
],
"matches" : 2
}
},
{
"_index" : "idx_term_level",
"_type" : "_doc",
"_id" : "3",
"_score" : 1.0,
"_source" : {
"name" : "王五",
"languages" : [
"java",
"donet",
"c"
],
"matches" : 3
}
},
{
"_index" : "idx_term_level",
"_type" : "_doc",
"_id" : "4",
"_score" : 1.0,
"_source" : {
"name" : "赵六",
"languages" : [
"php",
"c++",
"hive"
],
"matches" : 3,
"remark" : "hi world"
}
}
]
}
}
term level的动态匹配到单词的个数
通过term_set关键字查询,统计文档中动态匹配到单词的个数。
查询:
结果:
通配符查询–wildcard
wildcard:通配符查询
‘*’ :通配多个字符
查询:
GET idx_term_level/_search
{
"query": {
"wildcard": {
"languages": {
"value": "p*"
}
}
}
}
结果:
{
"took" : 58,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 4,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "idx_term_level",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"name" : "张三",
"languages" : [
"c++",
"java",
"php"
],
"matches" : 2
}
},
{
"_index" : "idx_term_level",
"_type" : "_doc",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"name" : "李四",
"languages" : [
"java",
"php",
"dotnet"
],
"matches" : 2
}
},
{
"_index" : "idx_term_level",
"_type" : "_doc",
"_id" : "4",
"_score" : 1.0,
"_source" : {
"name" : "赵六",
"languages" : [
"php",
"c++",
"hive"
],
"matches" : 3,
"remark" : "hi world"
}
},
{
"_index" : "idx_term_level",
"_type" : "_doc",
"_id" : "5",
"_score" : 1.0,
"_source" : {
"name" : "田七",
"languages" : [
"spark",
"pyhon",
"java"
],
"matches" : 3,
"remark" : "big data"
}
}
]
}
}
范围查询–range
range:用于数字和日期范围查询
查询:
GET idx_term_level/_search
{
"query": {
"range": {
"matches": {
"gte": 1,
"lte": 2
}
}
}
}
结果:
{
"took" : 39,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "idx_term_level",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"name" : "张三",
"languages" : [
"c++",
"java",
"php"
],
"matches" : 2
}
},
{
"_index" : "idx_term_level",
"_type" : "_doc",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"name" : "李四",
"languages" : [
"java",
"php",
"dotnet"
],
"matches" : 2
}
}
]
}
}
模糊匹配查询–fuzzy
模糊匹配表示返回包含与搜索词相似的词的文档。
- 更改字符
- 删除字符
- 插入字符
- 倒置两个相邻的字符
查询:
GET idx_term_level/_search
{
"query": {
"fuzzy": {
"remark": {
"value": "big"
}
}
}
}
结果:
{
"took" : 272,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.6931471,
"hits" : [
{
"_index" : "idx_term_level",
"_type" : "_doc",
"_id" : "5",
"_score" : 0.6931471,
"_source" : {
"name" : "田七",
"languages" : [
"spark",
"pyhon",
"java"
],
"matches" : 3,
"remark" : "big data"
}
}
]
}
}
正则表达式查询–regexp
正则表达式是一种占位符匹配数据的方法。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NBgmO9fz-1679648078946)(/Users/zhaoxianwang/Library/Application Support/typora-user-images/image-20230321095749205.png)]
查询:
GET idx_term_level/_search
{
"query": {
"regexp": {
"remark": {
"value": "hi*"
}
}
}
}
结果:
{
"took" : 22,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "idx_term_level",
"_type" : "_doc",
"_id" : "4",
"_score" : 1.0,
"_source" : {
"name" : "赵六",
"languages" : [
"php",
"c++",
"hive"
],
"matches" : 3,
"remark" : "hi world"
}
}
]
}
}
脚本总结:
# 创建索引映射
PUT idx_term_level
{
"mappings": {
"properties": {
"name": {
"type": "keyword"
},
"languages": {
"type": "keyword"
},
"matches": {
"type": "long"
}
}
}
}
POST idx_term_level/_bulk
{"index":{"_id":1}}
{"name":"张三","languages":["c++","java","php"],"matches":2}
{"index":{"_id":2}}
{"name":"李四","languages":["java","php","dotnet"],"matches":2}
{"index":{"_id":3}}
{"name":"王五","languages":["java","donet","c"],"matches":3}
{"index":{"_id":4}}
{"name":"赵六","languages":["php","c++","hive"],"matches":3,"remark":"hi world"}
{"index":{"_id":5}}
{"name":"田七","languages":["spark","pyhon","java"],"matches":3,"remark":"big data"}
GET idx_term_level/_search
{
"query": {
"exists": {
"field": "remark"
}
}
}
GET idx_term_level/_search
{
"query": {
"ids": {
"values": [1,4]
}
}
}
GET idx_term_level/_search
{
"query": {
"prefix": {
"name": {
"value": "张"
}
}
}
}
GET idx_term_level/_search
{
"query": {
"term": {
"languages": {
"value": "php"
}
}
}
}
GET idx_term_level/_search
{
"query": {
"terms": {
"languages": [
"c",
"c++"
]
}
}
}
GET idx_term_level/_search
{
"query": {
"wildcard": {
"languages": {
"value": "p*p"
}
}
}
}
GET idx_term_level/_search
{
"query": {
"range": {
"matches": {
"gte": 1,
"lte": 2
}
}
}
}
GET idx_term_level/_search
{
"query": {
"fuzzy": {
"remark": {
"value": "big"
}
}
}
}
GET idx_term_level/_search
{
"query": {
"regexp": {
"remark": {
"value": "hi*"
}
}
}
}