Elasticsearch常用查询
es和mysql类比
1、查询文档结构
GET how2java/product/_mapping
2.1、term查询 term的查询是代表完全匹配,搜索之前不会对你搜索的关键字进行分词,对你的关键字去文档分 词库中去匹配内容。
GET how2java/product/_search { "query": { "term": { "place.keyword": { "value": "江苏苏州" } } } }
2.2、terms查询 terms和term的查询机制是一样,都不会将指定的查询关键字进行分词,直接去分词库中匹配,找 到相应文档内容。
terms是在针对一个字段包含多个值的时候使用。
term:where place= 北京;
terms:where place= 北京 or place= ?or place= ?
GET how2java/product/_search { "query": { "terms": { "place.keyword": [ "北京", "上海" ] } } }
2.3、constants_score查询,不会将结果进行算分,并且查询结果有缓存,可以提高查询效率
GET how2java/product/_search { "query": { "constant_score": { "filter": { "match": { "place": "北京" } } } } }
3.1 match_all查询 查询全部内容,不指定任何查询条件。
POST how2java/product/_search { "query": { "match_all": {} } }
3.2 match查询 指定一个Field作为筛选的条件,采用and或者or的方式连接
POST how2java/product/_search { "query": { "match": { "name": { "query": "中国 健康", "operator": "or" } } } }
3.2.1 query_string查询 好像和match查询差不多
GET how2java/product/_search { "query": { "query_string": { "default_field": "name", "query": "非常 AND 美丽" //默认分隔符是OR } } }
3.3 multi_match查询 multi_match针对多个field进行检索,多个field对应一个text。
POST how2java/product/_search { "query": { "multi_match": { "query": "北京", "fields": ["name","category"] } } }
3.4 match_phrase查询 将查询内容作为一个整体不分词
GET how2java/product/_search { "query": { "match_phrase": { "name": "非常容易" } } }
4.1 id查询 只能用get 其余查询可以是get也可以是post
GET how2java/product/26469
4.2 ids查询
POST how2java/product/_search { "query": { "ids": { "values": [26469, 26470] } } }
5 prefix查询 前缀查询,可以通过一个关键字去指定一个Field的前缀,从而查询到指定的文档。(prefix,fuzzy,wildcard和regexp查询效率相对比较低,要求效率比较高时,避免去使用)
POST how2java/product/_search { "query": { "prefix": { "place": { "value": "武" } } } }
6 wildcard查询 通配查询,和MySQL中的like是一个套路,可以在查询时,在字符串中指定通配符*和占位符?(prefix,fuzzy,wildcard和regexp查询效率相对比较低,要求效率比较高时,避免去使用)
POST how2java/product/_search { "query": { "wildcard": { "place.keyword": { "value": "江苏??" } } } }
7 range查询 范围查询,只针对数值类型,对某一个Field进行大于或者小于的范围指 可以使用 gt:> gte:>= lt:< lte:<=
POST how2java/product/_search { "query": { "range": { "price": { "gte": 10, "lte": 20 } } } }
8 regexp查询 正则查询,通过你编写的正则表达式去匹配内容。(prefix,fuzzy,wildcard和regexp查询效率相对比较低,要求效率比较高时,避免去使用)
POST how2java/product/_search { "query": { "regexp": { "name":"包邮*" } } }
9 delete-by-query 根据term,match等查询方式去删除大量的文档
10.1 bool复合查询
复合过滤器,将你的多个查询条件,以一定的逻辑组合在一起。
must: 所有的条件,用must组合在一起,表示And的意思 会进行相关度的算分
must_not:将must_not中的条件,全部都不能匹配,标识Not的意思 不会进行相关度的算分
should:所有的条件,用should组合在一起,表示Or的意思 会进行相关度的算分
POST how2java/product/_search { "query": { "bool": { "should": [ { "term": { "place.keyword": { "value": "上海" } } }, { "term": { "place.keyword": { "value": "北京" } } } ], "must_not": [ { "range": { "price": { "gte": 100, "lte": 2000 } } } ], "must": [ { "match": { "name": "中国" } } ] } } }
10.2 filter查询 也属于bool查询的一种 filter中的条件是AND的关系 不会进行相关度的算分
query,根据你的查询条件,去计算文档的匹配度得到一个分数,并且根据分数进行排序,不会做 缓存的。
filter,根据你的查询条件去查询文档,不去计算分数,而且filter会对经常被过滤的数据进行缓 存。
POST how2java/product/_search { "query": { "bool": { "filter": [ { "term":{ "place.keyword":"北京" } }, { "range": { "price": { "lte": 10 } } } ] } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)