大数据利器Elasticsearch之全文本查询之simple_query_string查询

693 阅读2分钟

这是我参与8月更文挑战的第15天,活动详情查看:8月更文挑战
本Elasticsearch相关文章的版本为:7.4.2

根据提供的查询字符串返回文档。但是使用具有限制的但容许存在错误语法的解析器且不报错,它会忽略查询字符串的任何无效部分。

simple_query_string语法

simple_query_string查询的query支持以下运算符:

  • + 表示 AND 运算
  • | 表示 OR 操作
  • - 否定单个令牌
  • " 包装许多标记以表示用于搜索的短语
  • * 在术语的末尾表示前缀查询
  • ()表示优先
  • ~N 在一个词之后表示编辑距离(模糊)
  • ~N 在一个短语表示废液量之后

要从字面上使用这些字符之一,需要在字符前面使用反斜杠 ( \)对其进行转义。

fields参数支持使用通配符*和使用^进行调整权重相对其他字段。
例子: 此查询将返回符合以下条件的文档:

  1. titlebody进行查询;
  2. 需要在上述的两个字段中任何一个字段包含eggplant的文档,在title中包含eggplant的文档比在body中包含eggplant的文档权重大5倍;
  3. 或者不包含frittata的文档。
GET /_search
{
  "query": {
    "simple_query_string" : {
        "query": "eggplant -frittata",
        "fields": ["title^5", "body"]
    }
  }
}

如果想查询只包含eggplant同时不包含frittata的文档,应该这样:

GET /_search
{
  "query": {
    "simple_query_string" : {
        "query": "eggplant +-frittata",
        "fields": ["title^5", "body"]
    }
  }
}

flags参数可以限定simple_query_string的query中支持的运算符。
flags参数有效值:

  • ALL (默认)

    启用所有可选运算符。

  • AND

    启用+AND 运算符。

  • ESCAPE

    ``作为转义字符 启用。

  • FUZZY

    ~N在单词后 启用运算符,其中N是一个整数,表示允许的匹配编辑距离。

  • NEAR

    在匹配标记之间允许的最大位置数的~N短语之后 启用运算符N。同义SLOP

  • NONE

    禁用所有运算符。

  • NOT

    启用-NOT 运算符。

  • OR

    启用|OR 运算符。

  • PHRASE

    启用"用于搜索短语的引号运算符。

  • PRECEDENCE

    使()运算符能够控制运算符优先级。

  • PREFIX

    启用*前缀运算符。

  • SLOP

    在匹配标记之间允许的最大位置数的~N短语之后 启用运算符N。同义NEAR

  • WHITESPACE

    启用空格作为拆分字符。 例子:
    下面的查询将只启用ORANDPREFIX语法:

GET /_search
{
    "query": {
        "simple_query_string" : {
            "query" : "eggs | porridge + mea*",
            "flags" : "OR|AND|PREFIX"
        }
    }
}