DSL查询语法
1、查询所有
以下是简写和全写
总结:
2、全文检索查询(match)
全文检索查询,会对用户输入内容分词,常用于搜索框搜索:
回顾在 SpringCloud(七.3)ES(elasticsearch)-- RestClient操作 中创建索引时添加的 all 字段,以及字段拷贝 copy_to。这里all字段就派上了用场。
match查询
match查询:全文检索查询的一种,会对用户输入的内容分词,然后去倒排索引库检索,语法如下:
#match查询 GET /hotel/_search { "query": { "match": { "字段名": "检索内容" } } }
示例: 这样ES会根据字段拷贝copy_to 的三个字段(名称、品牌、城市)中去检索“外滩”,并返回数据。
#match查询 GET /hotel/_search { "query": { "match": { "all": "外滩" } } }
结果如图:
multi_match查询(多字段查询)
multi_match查询,与match查询类似,只不过允许同时查询多个字段,但是要注意!查询的字段越多,性能越差,推荐使用match查询。
语法如下:
#multi_match查询 GET /hotel/_search { "query": { "multi_match": { "query": "要检索的内容", "fields": ["字段1","字段2","字段3"] } } }
示例:在名称、品牌、商圈三个字段中检索“外滩”。
#multi_match查询 GET /hotel/_search { "query": { "multi_match": { "query": "要检索的内容", "fields": ["name","brand","business"] } } }
结果如图:
3、精确查询
精确查询一般是查找keyword、数值、日期、boolean等类型字段。所以不会对搜索条件分词。常见的有
- term:根据词条精确值查询。(如:品牌、城市、酒店星级等等)
- range:根据值的范围查询。(如:价格、日期等等)
term语法如下:
#term查询 GET /hotel/_search { "query": { "term": { "字段名": { "value": "查询内容" } } } }
示例:查询 城市 在 上海 的酒店数据
#term查询 GET /hotel/_search { "query": { "term": { "city": { "value": "上海" } } } }
结果如图:
range语法如下:
#range查询 GET /hotel/_search { "query": { "range": { "字段名": { "gte": 大于等于值, "lte": 小于等于值 } } } }
示例:查询 价格 在 200-300 元区间的酒店信息
#range查询 GET /hotel/_search { "query": { "range": { "price": { "gte": 200, "lte": 300 } } } }
结果如图:
标签:search,GET,--,SpringCloud,hotel,查询,DSL,query,match From: https://www.cnblogs.com/JoeYD/p/18143223