-
URI Search
使用http get 方式进行查询
-
Request Body Search
使用 es 提供的 基于json格式的更加完备的查询语言(DSL)
URI Search API
目标
-
Term Search 和 Phrase Search
-
URI Search 中的参数
URI query
//模板 GET /{index}_search?q={关键字}&df={指定查询的默认字段}&sort={指定排序字段}&from={第几条开始}&size={当前查询返回最多条数}&timeout={超时时间}
GET /donkeyx/_search?q=李思思&df=name&sort=age:desc&from=0&size=1&timeout=1s
{
"profile": "true"
}
- q 指定查询的语句 ,使用的Query String Syntax
- df 默认字段, 不指定时,会对所有字段进行查询
- Sort 排序
- form 和size 用于分页
- Profile 查看查询是如何被执行的
指定字段查询和泛查询
指定字段查询
//指定字段查询,2种
//1
GET /donkeyx/_search?q=李思思&df=name&sort=age:desc&from=0&size=1&timeout=1s
{
"profile": "true"
}
//2
GET /donkeyx/_search?q=name:李思思&sort=age:desc&from=0&size=1&timeout=1s
{
"profile": "true"
}
泛查询
//泛查询
GET /donkeyx/_search?q=李思思&sort=age:desc&from=0&size=1&timeout=1s
{
"profile": "true"
}
DisjunctionMaxQuery 会对文档中所有的字段进行查询
Term Query 和 Phrase Query
以电影 Calendar Girl 为例
- Calendar Girl 等效于Calendar OR Girl
- “Calendar Girl” 等效于 Calendar AND Girl 。在Phrase查询中,还要求前后顺序保持一致
分组与引号
- title:(Calendar AND Girl) 表示查询的字段中,Calendar和Girl2个单词都必须要有。这个类型的查询时BooleanQuery
- title:“Calendar Girl” 等效于title:(Calendar Girl) 使用的是TermQuery
布尔操作
- AND / OR / NOT 或者 && / || / ! (必须大写)
- +表示must
- -表示must_not
上图中AND 被es 解析为了+title:Calendar +title:Girl 说明es认为这两个单词在title中必须要有
范围查询
- 区间表示:[] 闭区间,{}开区间
- year:{1999 TO 2020}
- year:[* TO 2020]
- 算数符号
- year:>2019
- year:(>2019 && <=2021)
- year:(+>2019 +<=2021)
通配符查询/模糊/近似查询
- 通配符查询(通配符查询效率低,占用内存大)
- ? 表示1个字符,*表示0个或多个字符
- name:李?思
- name:李*
- ? 表示1个字符,*表示0个或多个字符
- 模糊匹配与近似查询
- title:Caelndar~1 虽然这里单词输入错误了,但是用了模糊查询,还是能将近似的查询出来
- title:“lord rings”~2 使用“”会让es使用Phrase查询,因为加了~2 ,所以查询结果中的lord 和 rings 必定会相隔2个字符