文章目录
es下term级别的查询语句
term-level queries 用于query或filter上下文
- exists query:返回包含索引数据字段的文档,即字段存在
- fuzzy query:返回 terms 和搜索 term 相近的文档,es使用 Levenshtein edit distance 规则查看搜索相关性(最短距离编辑),如 cat 和 cot,can 等只有一位距离差
- ids query:返回基于 doc ids 的文档(Returns documents based on their document IDs.)
- prefix query:返回包含特定前缀文本在提供的字段内的文档(Returns documents that contain a specific prefix in a provided field)
- range query:返回包含特定 terms 在提供的范围内的文档(Returns documents that contain terms within a provided range.)
- regexp query:包含的 terms 匹配正则表达式的文档
- term query:包含的精确 term 在提供的字段
- terms query:包含1或多个精确 terms 在提供的字段
- terms_set query:包含最小精确匹配 terms 数量在提供的字段,可用字段或 script 定义最小匹配的 terms
- type query:返回指定 type 的文档 (7废弃)
- wildcard query:包含 terms 匹配通配符的文档
exists 存在性查询
exists:辅助参数
- field:字段必须存在,且包含值,值不能是 null or [],值可以是 1. 空字符串 如"",2. 数组包含 null 和 其他值 如 [null, “foo”],3. mapping 定义的 null-value
存在:
"exists": {
"field": "user"
}
不存在:
"bool": {
"must_not": {
"exists": {
"field": "user"
}
}
}
fuzzy 查询
示例:
"query": {
"fuzzy": {
"user": {
"value": "ki" # 匹配 user:kk, kii, k, ik
}
}
}
可编辑距离默认是1,1个字符的概念变为相似的 term,这些改变有:
- box -> fox : 修改一个字符
- black -> lack:移除一个字符
- sic -> sick:插入一个字符
- act -> cat:换位两个相邻字符
fuzzy顶层辅助参数:
- field:用于搜索的字段,必填
field 的辅助参数:
- value:用于在 field 搜索的文本,必填字符串
- fuzziness:最大可编辑距离,有效值0,1,2 和 AUTO,选填字符串
AUTO:[low],[high] : 在 low - high 的文本中进行动态可编辑距离运算 输入文本字符长度不一样 可编辑距离不一样
AUTO 默认:AUTO:3,6
AUTO:3,6 指的是:value:ab 精确匹配 value:abc fuzziness为1 value:abcdef fuzziness为2
0-2个字符 必须精确匹配
3-5个字符 最大1可编辑距离
6-]个字符 最大2可编辑距离
- max_expansions:默认 50,创建变化的最大值,会按字母顺序搜索产生变化的 term 当搜索没有结果或数量超过 max_expansions 时结束,配合 prefix_length ,若 prefix_length 为0不建议调大该值,会出现性能问题(注意在部分场景该参数是分片级别,只能在一个分片内限制50),选填整型
- prefix_length:默认0,左起开始字符的数量,开始字符左不进行改变,右创建表达式,选填整型
- transpositions:默认 true,是否支持相邻字符交换 ab->ba,选填布尔
- rewrite:支持查询语句改写,把费时的原始查询类型实例改写成一个性能更高的查询类型实例
有效值:
constant_score (Default):对于更少的 terms 匹配使用 constant_score_boolean 其他使用 a bit set 位图
constant_score_boolean:
给每个文档分配等于 boost 参数的相关性得分
该方法将原始query转为一个bool query,该bool query 包含一个should子句和每个匹配关键的 term query
该方法可能导致最终的 bool query 会超过 indices.query.bool.max_clause_count 设置