【Elastic Search】 全文检索指南

间隔查询是一种在Elasticsearch中执行精确短语匹配的高级方法,允许对匹配行为进行精细控制,如顺序和距离限制。它包括match、prefix、wildcard、fuzzy和all_of、any_of等匹配参数,支持精确、前缀、通配符和模糊匹配。通过all_of和any_of,可以定义多个匹配条件并控制它们的关系。
摘要由CSDN通过智能技术生成

目录

间隔查询(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"。只要有一个短语的间隔满足条件即可。

参数解释

参数名称参数描述
matchmatch 匹配
prefix前缀匹配
wildcard通配符匹配
fuzzy模糊匹配
all_of所有指定间隔匹配,给定匹配中必须都要满足
any_of存在一个指定间隔匹配,给定匹配中只需要满足一个

Match匹配参数

参数名称是否必要参数类型参数描述默认参数
querystr查询词/句
max_gapsint匹配词之间的最大间隔数,如果未指定或设置为 -1,则匹配没有宽度限制。 如果设置为 0,则这些术语必须相邻出现。-1
orderedbool是否需要保证顺序出现false
analyzerstr指定分词器类型默认为顶层分词器类型
filterinterval filter rule object使用interval filter 进行过滤
use_fieldstr指定匹配方式 postings:指定倒排索引匹配 doc_values: 使用文档的doc_values匹配 freqs: 使用词频匹配 positions: 使用词项的位置信息进行匹配

Prefix 匹配参数

用于匹配指定前缀,前缀匹配词个数最多为128个。

参数名是否必要参数类型参数描述默认参数
prefixstr指定前缀
analyzerstr分词器
use_fieldstr匹配方式

Wildcard匹配参数

指定通配符进行匹配,最多扩展到128个匹配词。

参数名是否必要参数类型参数描述默认参数
patternstr匹配字符串 允许使用 [*?]进行匹配 *:任意个字符匹配,包括0 ?:单个字符匹配 避免使用 [*?] 匹配开头,会导致性能下降
analyzerstr分词器
use_fieldstr匹配方式

Fuzzy匹配参数

跟据模糊规则匹配给定匹配词,最多128个匹配词。

参数名是否必要参数类型参数描述默认参数
termstr匹配词
prefix_lengthint用于控制前缀长度0
transpositionsbool控制词项交换参数,即是否允许词项交换(ab→ba)true
fuzzinessstr最多进行模糊操作个数auto
analyzerstr分词器
use_fieldstr匹配方式,除非单独指定分析器,否则使用该字段中的搜索分析器对该术语进行规范化。

All_of

参数名称是否必要参数类型参数描述默认参数
intervals匹配数组具体匹配规则列表
max_gapsint匹配词之间的最大间隔数,如果未指定或设置为 -1,则匹配没有宽度限制。 如果设置为 0,则这些术语必须相邻出现。-1
orderedbool是否需要顺序出现false
filterinterval 规则对象过滤器

Any_of

参数名称是否必要参数类型参数描述默认参数
intervals匹配数组具体匹配规则列表
filterinterval 规则对象过滤器

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:需要匹配的字段值

参数详解
 

参数名是否必要参数类型参数描述默认值
querystr、int、.etc需要匹配的字段值
analyzerstr分词器
auto_generate_synonyms_phrase_querybool控制在查询时是否自动生成短语查询中的同义词true
fuzzinessstr模糊容忍度 “0”:精确匹配 “1“: 允许一个编辑操作。例如,插入、删除或替换一个字符 “2”: 允许两个编辑操作 ”auto”: 基于目标词的长度决定最大编辑距离。一般情况下,长度小于等于两个字符的词允许一个编辑操作,长度大于两个字符的词允许两个编辑操作。 ”2s": 允许两个编辑操作,但对较短的词应用了更严格的限制
max_expansionsint控制查询时查询词展开的最大数量 适用于某些查询类型,如前缀查询(Prefix Query)和通配符查询(Wildcard Query)50
prefix_lengthint在模糊匹配中保留字符串开头的字符数0
fuzzy_transpositionsbool是否允许交换词true
fuzzy_rewritestr指定查询的重写方法
lenientbool是否启用宽松模式,用于控制是否忽略格式错误。false
operatorstr指定bool运算的操作符 or: 给定词任意一个匹配即可 and: 给定词全部匹配才行or
minimum_should_matchstr指定返回最小匹配子句数,可给如下格式 1. 具体数值:必须匹配的最小子句数 2. 百分比值:表示根据总子句数计算的最小匹配子句数 3. "number" 或 "percentage" 加一个 "+" 号:表示匹配的子句数超过指定值 4. "number" 或 "percentage" 加一个 "-" 号:表示匹配的子句数少于指定值
zero_terms_querystr零词查询,指定当分析器移除所有词项时是否返回文档 "none"(默认值):如果分析器移除了所有词项,则不返回任何文档。这意味着如果查询经过分析后不剩下任何词项,将不会有文档被返回 "all":返回所有文档,类似于使用"match_all"查询。即使查询经过分析后不剩下任何词项,也会返回所有文档none
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值