首页 > 其他分享 >elasticsearch3

elasticsearch3

时间:2023-05-31 20:56:25浏览次数:44  
标签:匹配 前缀 通配符 elasticsearch3 phrase 词项 match

模糊查询
#前缀搜索:prefix

概念:以xx开头的搜索,不计算相关度评分。

注意:
    前缀搜索匹配的是term,而不是field。
    前缀搜索的性能很差
    前缀搜索没有缓存
    前缀搜索尽可能把前缀长度设置的更长

语法:
GET <index>/_search
{
  "query": {
    "prefix": {
      "<field>": {
        "value": "<word_prefix>"
      }
    }
  }
}
index_prefixes: 默认   "min_chars" : 2,   "max_chars" : 5


#通配符:wildcard

概念:通配符运算符是匹配一个或多个字符的占位符。例如,*通配符运算符匹配零个或多个字符。您可以将通配符运算符与其他字符结合使用以创建通配符模式。

注意:通配符匹配的也是term,而不是field

语法:
GET <index>/_search
{
  "query": {
    "wildcard": {
      "<field>": {
        "value": "<word_with_wildcard>"
      }
    }
  }
}

#正则:regexp

概念:regexp查询的性能可以根据提供的正则表达式而有所不同。为了提高性能,应避免使用通配符模式,如.或 .?+未经前缀或后缀

语法:
GET <index>/_search
{
  "query": {
    "regexp": {
      "<field>": {
        "value": "<regex>",
        "flags": "ALL",
      }
    }
  }
}

#模糊查询:fuzzy
混淆字符 (box → fox)
缺少字符 (black → lack)
多出字符 (sic → sick)
颠倒次序 (act → cat)

语法
GET <index>/_search
{
  "query": {
    "fuzzy": {
      "<field>": {
        "value": "<keyword>"
      }
    }
  }
}

#短语前缀:match_phrase_prefix

match_phrase:
    match_phrase会分词
    被检索字段必须包含match_phrase中的所有词项并且顺序必须是相同的
    被检索字段包含的match_phrase中的词项之间不能有其他词项

概念:
match_phrase_prefix与match_phrase相同,但是它多了一个特性,就是它允许在文本的最后一个词项(term)上的前缀匹配,如果 是一个单词,比如a,它会匹配文档字段所有以a开头的文档,如果是一个短语,比如 "this is ma" ,他会先在倒排索引中做以ma做前缀搜索,然后在匹配到的doc中做match_phrase查询,(网上有的说是先match_phrase,然后再进行前缀搜索, 是不对的)

参数
    analyzer 指定何种分析器来对该短语进行分词处理
    max_expansions 限制匹配的最大词项
    boost 用于设置该查询的权重
    slop 允许短语间的词项(term)间隔:slop 参数告诉 match_phrase 查询词条相隔多远时仍然能将文档视为匹配 什么是相隔多远? 意思是说为了让查询和文档匹配你需要移动词条多少次?

标签:匹配,前缀,通配符,elasticsearch3,phrase,词项,match
From: https://www.cnblogs.com/rbcd/p/17447298.html

相关文章