Search API
- URI Search:在URL中使用查询参数
- Request Body Search:使用Elasticsearch提供的,基于json格式的更加完备的Query Domain Speacific Language(DSL)
指定查询的索引
- /_search:集群上所有的索引
- /index1/_search:index1
- /index1,index2/_search:index1和index2
- /index/_search:以index开头的索引
URI查询
- 使用"q",指定查询字符串
- "query string syntax",kv查询字符串
- eg:curl -XGET "http://localhost:9200/movies/_search?q=title:Toy Story",
- q用来表示查询的内容
- 搜索叫做toy stroy 的电影
Request Body
- eg: curl -XGET "http://localhost:9200/movies/_search" -H 'Content-Type: application/json' -d '{"query": {"match_all": {}}}'
- -XGET:支持post和get
- movies:需要操作的索引名
- _search:执行搜索的操作
- query:查询
- match_al:返回所有文档
URI Search - 通过URI query 实现搜索
GET /movies/_search?q=2012&df=title&sort=year:desc&from=0&size=10&timeout=1s
{
"profile": true
}
- q 指定查询语句,使用query string syntax
- df 默认子都拿,不指定时,会对有所字段进行查询
- sort 排序/ from 和 size 用于分野
- profile 可以查看查询是如何被执行的
URI Search Deom
- 指定字段查询
- GET movies/_search?q=2012&df=title
- GET movies/_search?q=title:2012
- 泛查询
- GET movies/_search?q=2012
- GET movies/_search?q=title:Beautiful Mind
Query string Syntax
- 指定字段 vs 泛查询
- q=title:2012 / q=2012
- Term vs Phrase
- Beautiful Mind 等效于 Beautiful OR Mind
- "Beautiful Mind",等效于 Beautiful AND MIND。Phrase查询,还要求前后
- 分组与引号
- title:(Beautiful AND Mind)
- title="Beautiful Mind"
- 布尔操作
- AND / OR / NOT 或者 && / || / !
- 必须大写
- tiltle:(matrix NOT reloaded)
- AND / OR / NOT 或者 && / || / !
- 分组
- 表示must
- - 表示must_not
- tilte:( matrix -reloaded)
- 范围查询
- 区间表示:[]闭区间,{}开区间
- year:{2019 TO 2018]
- year:[* TO 2018]
- 区间表示:[]闭区间,{}开区间
- 算数符号
- year:>2010
- year:(>2010 && <=2018)
- year:( >2010 <2018)
- 通配符查询(通配符查询效率太低,占用内存大,不建议使用,特别是放在最前面)
- ?代表1个字符,*代表0或多个字符
- title:mi?d
- title:be*
- ?代表1个字符,*代表0或多个字符
- 正则表达
- title:[bt]oy
- 模糊匹配与近似匹配
- title:befutifl~1
- title:"lord rings"~2
Request Body Search
- 将查询语句通过http request body 发送给es
- Query DSL
- 分页
- 排序
- _source filtering
- 脚本字段
- eg:订单中有不同汇率,需要对不同汇率进行结算排序
- 使用查询表达式 - Match
- 短语搜索 -Match Phrase
query string && simple query string
- query string
- 类似url query
- simple query string
- 类似query string, 但是会忽略语法的错误,同时只支持部分查询语法
- 不支持 AND OR NOT 会当作字符串处理
- Term 之间默认的关系是OR ,可以指定operator