ElasticSearch使用Search API
- URI Search : 在URI中使用查询参数
- Request Body Search:使用ElasticSearch 提供的,基于JSON格式更加完备的Query Domain Specific Lannguage (DSL)
指定查询的索引
| 语法 | 范围 |
|---|---|
| /_search | 集群上所有的索引 |
| /index1/_search | index1 |
| /index1,index2/_search | index1和index2 |
| /index*/_search | 以index开头的索引 |
-
URI查询
- 使用
q指定查询字符串 ,使用KV键值对形式- 指定字段 v.s 泛查询
- 指定字段: q=title:2012
- 泛查询:q=2012 查询所有字段
- Term v.s Phrase
- Term 查询:Natural Born Killers 等效于 Natural
ORBornORKillers - Phrase 查询:“Natural Born Killers” 等效于 Natural
ANDBornANDKillers。Phrase 查询还要求前后顺序保持一致
- Term 查询:Natural Born Killers 等效于 Natural
- 分组与引号
- title:(Natural AND Born)
- title=“Natural Born”
- 布尔操作
AND/OR/NOT或者&&/||/!(AND: 条件全满足;OR: 条件至少满足其一;NOT: 条件必须不满足 )- (必须大写 eg:title:(matrix NOT reloaded))
- 分组
+表示 must-表示 must_not- title:(+matrix -reloaded)
- 范围查询
- 区间表示:[] 闭区间,{} 开区间
- year:{2019 TO 2018} year:[* TO 2018]
- 算术符号
- year:>2010
- year:(>2010 && <=2018)
- year:(+>2010 +<=2)
- 通配符查询(通配符查询效率低,占用内存大,不建议使用,特别是放在最前面)
?代表一个字符,*代表 0 或多个字符- title:mi?d
- title:bea*
- 正则表达
- title:[bt]oy
- 模糊匹配与近似查询
- title:befutifl~1
- title:“lord rings”~2
- 指定字段 v.s 泛查询
df默认字段,不指定时,会对所有的字段进行查询sort排序from和size用于分页- profile 可以查询是如何被执行的
GET movies/_search?q=2012&df=title&sort=year:desc&from=0&size=3&timeout=1s { "profile":"true" }查询movies 索引里,title=2012,查询限制超时1秒。查询结果根据year倒序,从0开始,取3条数据,并查看查询如何被执行的
GET movies/_search?q=title:"Natural Born Killers"q用来表示查询内容
搜索 title 存在Natural 或者 Born 或者 Killers的文档- 搜索Response
-
- 使用
-
Request Body查询
- 将查询语句通过HTTP Request Body 发送给ElasticSearch
POST movies/_search # GET POST 都可以 { "sort":[{"year":"desc"}] "from":10, "size":5, "_source":["需要的字段1","需要的字段2","day*(支持通配符)"] "query":{ # 查询 "match_all": {} # 返回所有的文档,默认10条 } }-
脚本字段
返回新字段(例如对结果字段进行拼接,计算等)
GET movies/_search { "script_fields": { "new_year": { # 新的字段名 "script": { "lang":"painless", "source":"doc['year'].value + '_年'" } } }, "_source":["year","title"], "query":{ "match_all":{} } } -
使用查询表达式 - Match
GET movies/_search { "query":{ "match":{ "title":"Natural Born Killers" } } } 查询 title 包含Natural or Born or Killers 的文档
GET movies/_search { "query":{ "match":{ "title":{ "query":"Natural Born Killers" , "operator":"AND" } } } } -
或者使用 match_phrase 查询
GET movies/_search { "query":{ "match_phrase":{ "title":{ "query":"Natural Born Killers" } } } }都可以查询 title 包含 “Natural Born Killers” 的文档
-
使用 Query Sting Query
POST movies/_search { "query":{ "query_string":{ "default_field": "title", "query":"Natural AND Born" } } }
本文深入探讨ElasticSearch中的高级查询技术,包括URI查询、RequestBody查询、脚本字段使用及各种查询类型如Match、MatchPhrase和QueryStringQuery的运用。通过实例解析,帮助读者掌握高效查询方法。
1218

被折叠的 条评论
为什么被折叠?



