ES Query DSL-文本查询

ES Query DSL

ES 查询使用Query DSL定义查询条件,除了精确查询Term外还包括以下查询:符合查询、文本查询、关联查询等结构

文本查询

Intervals 查询

       区间查询:根据匹配项的顺序和接近度返回文档。

POST _search

{

  "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" } }

                ]

              }

            }

          ]

        }

      }

    }

  }

}

Intervals: {

       “field”: {

              “match”|”prefix”|”wildcard”|”fuzzy”|”any_of”|”all_of”:{}

       }

}

Match文本匹配规则,查询对象包括以下属性:

query: 匹配文本呢

max_gaps: query匹配文本中术语的最大间隔, 默认是-1,表示不限制。 0则表示匹配文本必须严格相邻, 不允许出现间隔。

ordered: 可选,true则表示匹配术语必须按照query指定顺序

analyzer: 分词器

filter: interval filter可选过滤器。

use_field: 指定作用域。

prefix 规则参数

prefix: 匹配前缀

analyzer: 分词器

use_field: 指定作用域。

wildcard规则参数:

pattern: 匹配模式

analyzer: 分词器

use_field: 指定作用域。

fuzzy rule 参数

term: 匹配术语

prefix_length: 创建扩展时保持不变的起始字符数,默认是0

transpositions: 指示编辑是否包括两个相邻字符的换位

fuzziness: 允许匹配的最大编辑举例, 模糊度, 最多可以纠正几个字母去跟你的数据进行匹配,默认如果不设置,就是2

analyzer: 分词器

use_field: 指定作用域。

all_of: 多个interval的匹配组合,全部

intervals: 组合中的intervals结构

max_gaps|ordered|fitler

any_of:多个interval的匹配组合,任意一个

intervals: 组合中的intervals结构

filter:过滤规则

filter:过滤规则

after: (可选,查询对象)—query的interval在filter的interval之后

before: (可选,规则对象)—query的interval在filter的interval之前

contained_by: (可选,查询对象)—filter中的interval包含query的interval

containing: (可选,查询对象)—query的interval包含filter的interval

not_contained_by: (可选,查询对象)—filter中的interval不包含query的interval

not_containing: (可选,查询对象)—query的interval不包含filter的interval

not_overlapping: (可选,查询对象)—filter中的interval与query的interval不重叠

overlapping: (可选,查询对象)—filter中的interval与query的interval相互重叠

script: (可选,脚本对象)—脚本用于返回匹配的文档

//以下查询包含filter规则,有两个限制条件:

//1、要求desc字段查询时指定的query字段中两个词相隔不得超过3个位置(max_gaps)

//2、在匹配词'distributed engine'之间不允许包含'redis'字段

POST software/_search

{

  "query": {

    "intervals":{

      "desc":{

        "match":{

          "query":"distributed engine",

          "max_gaps": 3,

          "filter":{

            "not_containing":{

              "match":{

                "query": "redis"

              }

            }

          }

        }

      }

    }

  }

}

POST _search

{

  "query": {

    "intervals" : {

      "my_text" : {

        "all_of" : {

          "intervals" : [

            { "match" : { "query" : "the" } },

            { "any_of" : {

                "intervals" : [

                    { "match" : { "query" : "big" } },

                    { "match" : { "query" : "big bad" } }

                ] } },

            { "match" : { "query" : "wolf" } }

          ],

          "max_gaps" : 0,

          "ordered" : true

        }

      }

    }

  }

}

Match 查询

       返回匹配的文档

GET /_search

{

  "query": {

    "match": {

      "message": {

        "query": "this is a test"

      }

    }

  }

}

<field> : 指定匹配作用的域

       <query>: 文本、数字、boolean或日期等期望在域中找到的值。Query查找不是精确查找,而是会使用文本分析后的token来进行匹配。

       <analyzer>: 分析器, 不指定则使用文档域所指定的默认分析器。

auto_generate_synonyms_phrase_query: 可选, 如果设置为true则自动生成同义的上术语查询。

fuzziness: 模糊度,错误字符数

max_expansions: 查询延伸的最大术语个数, 默认是50

prefix_length:允许模糊匹配的最小前缀长度(该长度内字符不进行模糊匹配)默认是0.

fuzzy_transpositions: 模糊匹配是否匹配字符位置交换的情况

fuzzy_rewrite: 用于重写查询

lenient: 为true时, 格式相关的错误将被忽略, 如对一个数字域进行文本查询。默认是false

operator: query 查询术语之间的关系, 有OR , AND

minimum_should_match:指定match 应匹配的最小规则数量。

zero_terms_query:指定当analyzer移除所有tokens后的文档返回行文。 默认是none: 不返回文档。 all: 返回所有文档。

GET /_search

{

  "query": {

    "match": {

      "message": {

        "query": "this is a test",

        "operator": "and"

      }

    }

  }

}

match_bool_prefix

       分析查询输入,转换为多个术语的bool查询。

GET /_search

{

  "query": {

    "match_bool_prefix" : {

      "message" : "quick brown f"

    }

  }

}

GET /_search

{

  "query": {

    "bool" : {

      "should": [

        { "term": { "message": "quick" }},

        { "term": { "message": "brown" }},

        { "prefix": { "message": "f"}}

      ]

    }

  }

}

match_phrase

 match_phrase是短语搜索,使用文本分析器分析给定的短语(phrase),转换短语为一个完整的查询条件,而不是进行文本分析后的match查询

GET /_search

{

  "query": {

    "match_phrase": {

      "message": {

        "query": "this is a test",

        "analyzer": "my_analyzer"

      }

    }

  }

}

Match phrase prefix query

短语按照给定顺序,并且作为一个前缀进行匹配。

GET /_search

{

  "query": {

    "match_phrase_prefix": {

      "message": {

        "query": "quick brown f"

      }

    }

  }

}

"match_phrase_prefix": {

       “Field”: //匹配域

       {

              “query”:””,//查询短语,

              “analyzer”:””//分析器, 转换query值

              “max_expansions”:50,//最大的扩展术语扩展数量

              “slop”:0,//匹配token之间最大的位置, 默认是0,

              “zero_terms_query”: none|all,//当分析器移除所有token时的文档返回行为。

       }

}

Combined fields

支持对对个文本域进行查询。

GET /_search

{

  "query": {

    "combined_fields" : {

      "query":      "database systems",

      "fields":     [ "title", "abstract", "body"],

      "operator":   "and"

    }

  }

}

query: 匹配文本

fileds: 作用的域

auto_generate_synonyms_phrase_query: true启动同义查询

operator:token 匹配行文 , or and

minimum_should_match|zero_terms_query: 同上文

combined fields和multi_match查询到区别:

combined fields: 针对多个文本域进行匹配, 要求具有同样的分析器。

multi_match:可以使用一个查询处理不同类型的域,如关键词, 数字等。

Multi-match query

构建针对多个域的match查询。

GET /_search

{

  "query": {

    "multi_match" : {

      "query":    "Will Smith",

      "fields": [ "title", "*_name" ]

    }

  }

}

GET /_search

{

  "query": {

    "multi_match" : {

      "query" : "this is a test",

      "fields" : [ "subject^3", "message" ]

    }

  }

}

best_fields: 使用best_fields指定域的_score

most_fields: 使用所有匹配域的分数合并为_score

cross_fields:  将使用相同分析器的多个域当成一个大域

phrase:在每一个域上执行一个match_phrase,使用最匹配的_score.

phrase_prefix: 类似phrase,执行phrase_prefix

bool_prefix: 在每个域上执行match_boolean_prefix。组合_score分数

GET /_search

{

  "query": {

    "multi_match" : {

      "query":      "brown fox",

      "type":       "best_fields",

      "fields":     [ "subject", "message" ],

      "tie_breaker": 0.3

    }

  }

}

GET /_search

{

  "query": {

    "multi_match" : {

      "query":      "Will Smith",

      "type":       "cross_fields",

      "fields":     [ "first_name", "last_name" ],

      "operator":   "and"

    }

  }

}

Query String

       可以 AND , NOT 等关键词提供搜索语义。

GET /_search

{

  "query": {

    "query_string": {

      "query": "(new york city) OR (big apple)",

      "default_field": "content"

    }

  }

}

query_string:

       query: 查询语句

       default_field:没有指定作用域时默认查询的域, 查询不会作用再嵌入域中, 嵌入域需要使用nested 查询。

       default_operator: 当query语句中没有指定操作符时的默认操作符, OR(默认) , AND

       fields: 查询的域

Query string query | Elasticsearch Guide [7.17] | Elastic 了解详细Query String 语法。

Simple Query String

和Query String的区别在于,对语法的限定, 当查询语法超出限定时,Simple Query String 忽略非法的语法。

GET /_search

{

  "query": {

    "simple_query_string" : {

        "query": "\"fried eggs\" +(eggplant | potato) -frittata",

        "fields": ["title^5", "body"],

        "default_operator": "and"

    }

  }

}

query: 查询语句

fields: 查询域

default_operator: 默认逻辑操作符: OR(默认), AND

analyze_wildcard: true时,扩展通配符查询, flase不扩展 默认是false

auto_generate_synonyms_phrase_query: true-扩展统一查询,默认true

flags: 允许的操作符列表。

Simple query string 语法支持以下操作符:

+: AND

|: OR

-: NOT

“”: 引用符作为一个完整短语查询

*: 术语之后表示前缀查询

(): 运算优先级

~N: 在词之后表示一个模糊距离

~N:在短语之后表示Slot量

GET /_search

{

  "query": {

    "simple_query_string": {

      "fields": [ "content" ],

      "query": "foo bar -baz"

    }

  }

}

flags限制可用操作符

GET /_search

{

  "query": {

    "simple_query_string": {

      "query": "foo | bar + baz*",

      "flags": "OR|AND|PREFIX"

    }

  }

}

ALL: 默认 全部

AND: 使能AND

ESCAPE: 使能\作为escape字符

FUZZY:使能~N应用在词后面

NEAR:使能~N应用在短语后面

NONE:失效所有操作符

NOT:使能-

OR:使能\|

PHRASE: 使能””

PRECEDENCE:使能()

PREFIX:使能*

SLOP:同NEAR

WHITESPACE: 使能空格作为分隔符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值