目录
间隔查询(Intervals)
功能描述
结构示例
参数解释
Match匹配参数
Prefix 匹配参数
Wildcard匹配参数
Fuzzy匹配参数
All_of
Any_of
Filter
Match匹配
结构示例
参数详解
间隔查询(Intervals
)
官方文档
功能描述
一种用于在文本字段中执行精确的短语匹配的高级查询方式,在该方式中,通过intervals的特殊数据结构,可以更精确控制匹配行为的场景,如要求匹配的短语具有特定的顺序或距离限制。
结构示例
{
"query": {
"intervals" : {
"my_text" : {
"all_of" : {
"ordered" : true,
"intervals" : [
{
"match" : {
"query" : "my favorite food",
"max_gaps" : 0,
"ordered" : true
}
},
{
"any_of" : {
"intervals" : [
{ "match" : { "query" : "hot water" } },
{ "match" : { "query" : "cold porridge" } }
]
}
}
]
}
}
}
}
}
查询解释:
- 查询字段名称为 "my_text"。
- 使用 "all_of" 子句,表示要求所有指定的间隔匹配
- "ordered" 参数设置为 true,表示要求短语的间隔按照指定的顺序出现
- 第一个间隔是 "my favorite food",要求该短语的间隔没有任何间隔(max_gaps: 0)且按照指定的顺序出现(ordered: true)
- 第二个间隔使用 "any_of" 子句,表示至少要有一个间隔匹配。在这个例子中,有两个候选短语:"hot water" 和 "cold porridge"。只要有一个短语的间隔满足条件即可。
参数解释
Match匹配参数
参数名称 | 是否必要 | 参数类型 | 参数描述 | 默认参数 |
query | 是 | str | 查询词/句 | |
max_gaps | 否 | int | 匹配词之间的最大间隔数,如果未指定或设置为 -1,则匹配没有宽度限制。 如果设置为 0,则这些术语必须相邻出现。 | -1 |
ordered | 否 | bool | 是否需要保证顺序出现 | false |
analyzer | 否 | str | 指定分词器类型 | 默认为顶层分词器类型 |
filter | 否 | interval filter rule object | 使用interval filter 进行过滤 | |
use_field | 否 | str | 指定匹配方式 postings:指定倒排索引匹配 doc_values: 使用文档的doc_values匹配 freqs: 使用词频匹配 positions: 使用词项的位置信息进行匹配 | |
Prefix 匹配参数
用于匹配指定前缀,前缀匹配词个数最多为128个。
参数名 | 是否必要 | 参数类型 | 参数描述 | 默认参数 |
---|
prefix | 是 | str | 指定前缀 | |
analyzer | 否 | str | 分词器 | |
use_field | 否 | str | 匹配方式 | |
Wildcard匹配参数
指定通配符进行匹配,最多扩展到128个匹配词。
参数名 | 是否必要 | 参数类型 | 参数描述 | 默认参数 |
pattern | 是 | str | 匹配字符串 允许使用 [*?]进行匹配 *:任意个字符匹配,包括0 ?:单个字符匹配 避免使用 [*?] 匹配开头,会导致性能下降 | |
analyzer | 否 | str | 分词器 | |
use_field | 否 | str | 匹配方式 | |
Fuzzy匹配参数
跟据模糊规则匹配给定匹配词,最多128个匹配词。
参数名 | 是否必要 | 参数类型 | 参数描述 | 默认参数 |
---|
term | 是 | str | 匹配词 | |
prefix_length | 否 | int | 用于控制前缀长度 | 0 |
transpositions | 否 | bool | 控制词项交换参数,即是否允许词项交换(ab→ba) | true |
fuzziness | 否 | str | 最多进行模糊操作个数 | auto |
analyzer | 否 | str | 分词器 | |
use_field | 否 | str | 匹配方式,除非单独指定分析器,否则使用该字段中的搜索分析器对该术语进行规范化。 | |
All_of
参数名称 | 是否必要 | 参数类型 | 参数描述 | 默认参数 |
---|
intervals | 是 | 匹配数组 | 具体匹配规则列表 | |
max_gaps | 否 | int | 匹配词之间的最大间隔数,如果未指定或设置为 -1,则匹配没有宽度限制。 如果设置为 0,则这些术语必须相邻出现。 | -1 |
ordered | 否 | bool | 是否需要顺序出现 | false |
filter | 否 | interval 规则对象 | 过滤器 | |
Any_of
参数名称 | 是否必要 | 参数类型 | 参数描述 | 默认参数 |
---|
intervals | 是 | 匹配数组 | 具体匹配规则列表 | |
filter | 否 | interval 规则对象 | 过滤器 | |
Filter
参数名称 | 是否必要 | 参数类型 | 参数描述 | 默认参数 |
---|
after | 否 | 查询对象 | 用于返回过滤规则中某个间隔之后的间隔的查询 | |
before | 否 | 查询对象 | 用于返回过滤规则中某个间隔之前发生的间隔的查询 | |
contained_by | 否 | 查询对象 | 用于返回过滤规则中的间隔所包含的间隔的查询 | |
containing | 否 | 查询对象 | 用于返回包含过滤规则中的间隔的查询 | |
not_contained_by | 否 | 查询对象 | 用于返回过滤规则中的间隔未包含的间隔的查询 | |
not_containing | 否 | 查询对象 | 用于返回不包含过滤规则间隔的间隔的查询 | |
not_overlapping | 否 | 查询对象 | 用于返回与过滤规则中的间隔不重叠的间隔的查询 | |
overlapping | 否 | 查询对象 | 用于返回与过滤规则中的间隔重叠的间隔的查询 | |
script | 否 | 查询对象 | 用于返回匹配文档的脚本 | |
Match匹配
官方文档
结构示例
{
"query": {
"match": {
"message": {
"query": "this is a test"
}
}
}
}
message: 字段名称 query:需要匹配的字段值
参数详解
参数名 | 是否必要 | 参数类型 | 参数描述 | 默认值 |
query | 是 | str、int、.etc | 需要匹配的字段值 | |
analyzer | 否 | str | 分词器 | |
auto_generate_synonyms_phrase_query | 否 | bool | 控制在查询时是否自动生成短语查询中的同义词 | true |
fuzziness | 否 | str | 模糊容忍度 “0”:精确匹配 “1“: 允许一个编辑操作。例如,插入、删除或替换一个字符 “2”: 允许两个编辑操作 ”auto”: 基于目标词的长度决定最大编辑距离。一般情况下,长度小于等于两个字符的词允许一个编辑操作,长度大于两个字符的词允许两个编辑操作。 ”2s": 允许两个编辑操作,但对较短的词应用了更严格的限制 | |
max_expansions | 否 | int | 控制查询时查询词展开的最大数量 适用于某些查询类型,如前缀查询(Prefix Query)和通配符查询(Wildcard Query) | 50 |
prefix_length | 否 | int | 在模糊匹配中保留字符串开头的字符数 | 0 |
fuzzy_transpositions | 否 | bool | 是否允许交换词 | true |
fuzzy_rewrite | 否 | str | 指定查询的重写方法 | |
lenient | 否 | bool | 是否启用宽松模式,用于控制是否忽略格式错误。 | false |
operator | 否 | str | 指定bool运算的操作符 or: 给定词任意一个匹配即可 and: 给定词全部匹配才行 | or |
minimum_should_match | 否 | str | 指定返回最小匹配子句数,可给如下格式 1. 具体数值:必须匹配的最小子句数 2. 百分比值:表示根据总子句数计算的最小匹配子句数 3. "number" 或 "percentage" 加一个 "+" 号:表示匹配的子句数超过指定值 4. "number" 或 "percentage" 加一个 "-" 号:表示匹配的子句数少于指定值 | |
zero_terms_query | 否 | str | 零词查询,指定当分析器移除所有词项时是否返回文档 "none"(默认值):如果分析器移除了所有词项,则不返回任何文档。这意味着如果查询经过分析后不剩下任何词项,将不会有文档被返回 "all":返回所有文档,类似于使用"match_all"查询。即使查询经过分析后不剩下任何词项,也会返回所有文档 | none |