es-searchApi概览-04
Elasticsearch searchApi概览
search API
- URL Search
- 在url使用query参数
- Request Body
- 使用ES提供的,基于json更加完备的,Quey Domain Specific Language(DSL)
1
2
3
4
5
6
7
8
9{
"from" : 0, // 返回搜索结果的开始位置
"size" : 10, // 分页大小,一次返回多少数据
"_source" :[ ...需要返回的字段数组... ],
"query" : { ...query子句... },
"aggs" : { ..aggs子句.. },
"sort" : { ..sort子句.. }
}
- 使用ES提供的,基于json更加完备的,Quey Domain Specific Language(DSL)
指定查询的索引
语法 | 范围 |
---|---|
/_search | 集群上的所有索引 |
/index1/_search | index1 |
/index1,index2/_search | index1 和 index2 |
/index*/_search | index开头的索引 |
URI查询
- 使用‘q’,指定查询字符串
- “query string syntax”,kv键值对
1 |
|
URI search-通过URI query实现搜索
1 |
|
- q 指定查询语句,使用qeruy string syntax 语法
- df 默认字段,不指定时,会对所有字段进行查询
- sort排序/from 和 size 用于分页
- profile 可以查看查询是如何被执行的
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 或者 && / || / !
- 必须大写
- title:(matrix NOT reloaded)
- AND / OR / NOT 或者 && / || / !
分组
- +表示must
- -表示must_not
- title:(+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:befutifl~1
- title:”lord rings”~2
Request Body Search
列了一些常用的查询方式,详细的内容还要到官网翻一翻
DSL的查询语法-官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/query-dsl.html
- 将查询语句通过HTTP Request Body 发送给ElasticSearch
- Query DSL (domain-specific language)
1
2
3
4curl -i \
-X GET http://127.0.0.1:9200/kibana_sample_data_ecommerce/_search \
-H 'Content-Type:application/json' \
-d '{ "profile": true, "query":{ "match_all":{}}}'
分页
1 |
|
- from 从0开始,默认返回10个结果
- 获取靠后的翻页成本更高
排序
1 |
|
- 最好在“数字型”和“日期型”的字段上排序
- 因为对于多值类型和分析过的值,系统会选一个值,无法的值该值
_source filtering
1 |
|
- 如果_source 中的字段没有,那就值返回匹配的文档的元数据
- _source 支持使用通配符_source[“name*“,”desc*“]
脚本字段
1 |
|
painless 是es编写脚本的语言,默认为painless
使用Query 查询
match 匹配单个字段
1 |
|
- 返回与提供的文本和数字,日期或布尔值匹配的文档。在匹配之前分析提供的文本
- match查询是执行全文搜索的标准查询,包括模糊匹配选项
term 精确匹配单个字段
1 |
|
避免对文本字段使用term查询。
默认情况下,Elasticsearch会更改文本字段的值作为分析的一部分。这可能会使查找文本字段值的精确匹配变得困难。
要搜索文本字段值,请改用match查询。
- 使用term 可根据精确值去匹配
terms 查询类似SQL的in
1 |
|
- 可匹配 filed 的值是否在列表中
range 范围查询
1 |
|
参数
- gt
-(可选)大于 - gte
-(可选)大于或等于 - lt
-(可选)小于 - lte
-(可选)小于或等于
bool 组合查询
1 |
|
- must 子句,必须出现在匹配的文档中,有助于得分
- filter 子句,必须出现在匹配的文档中,子句在过滤器上下文中执行,这意味着评分被忽略
- should 子句,应该出现在匹配的文中
- must_not 子句,不得出现在匹配的文中,子句在过滤器上下文中执行,这意味着评分被忽略
es-searchApi概览-04
http://example.com/2022/11/07/es/es-searchApi概览-04/