match查询接受文本/数字/日期,分析他们,并构件查询。例如:html
GET /_search { "query": { "match" : { "message" : "this is a test" } } }
注意,message 是字段的名字,你可使用任意字段(包括_all)来代替。elasticsearch
match查询是boolean类型的。这意味着分析所提供的文本,而且分析进程从提供的文本构造一个boolean查询。操做符能够被设置为or 或者 and 以控制boolean子句(默认为or)。能够经过使用minimun_should_match参数设置要匹配的可选should子句的最小数量。ide
分析器能够设置控制那个分析器将对文本执行分析过程。它默认为字段显示映射定义或默认搜索分析器。测试
能够设置lenient参数为true以忽略由于数据类型不匹配致使的异常,例如尝试在文本查询字符串中查询数字字段。默认为false。ui
fuzziness容许基于查询字段类型的模糊匹配。有关容许的设置,请看Fuzziness一节。this
perfix_length和max_expansions能够在这种状况下被设置,以控制模糊过程。若是模糊选择被设置,则查询将使用top_terms_blended_freqs_${max_expansions}做为其重写的方法,fuzzy_rewrite参数容许控制查询将如何重写。spa
模糊转换(ab->ba)默认被容许,但能够经过将fuzzy_transpositions设置为false来禁止。code
如下是提供附加参数的一个例子(注意结构略有变化,message是字段名称):htm
GET /_search { "query": { "match" : { "message" : { "query" : "this is a test", "operator" : "and" } } } }
若是使用的分析仪删除了像stop过滤器这样的查询中的全部令牌,默认的行为是根本不匹配任何文档。为了改变,可使用zero_terms_query选项,它接收none(默认)和all,而且符合match_all查询。blog
GET /_search { "query": { "match" : { "message" : { "query" : "to be or not to be", "operator" : "and", "zero_terms_query": "all" } } } }
匹配查询支持cutoff_frequency,容许指定决定或相对文档频率,其中高频率项被移动到可选子查询中,而且低频项之一在or操做匹配的状况或者全部的低频项在and操做符匹配的状况下才能得分。
此查询容许在运行时动态处理stopwords,与领域无关,不须要停用文件。它能够防止对高频项进行评分/迭代,若是更高/更低的频率项与文档匹配,则仅考虑这些术语。而后,若是全部查询词都高于给定的cutoff_frequency,则查询将自动转换为纯链接(and)查询,以确保快速执行。
若是在[0..1)范围内,则cutoff_frequency能够相对于文档总数,若是大于或等于1.0,cutoff_frequency能够是绝对的文档总数。
下面是一个例子,显示了一个由stopwords exclusively组成的查询。
GET /_search { "query": { "match" : { "message" : { "query" : "to be or not to be", "cutoff_frequency" : 0.001 } } } }
重要:cutoff_frequency选项以per_shard_level运行。这意味着当你尝试使用低文档编号的测试索引时,你应该遵循相关性中的建议。
与query_string/field进行对比
查询匹配系列不会经过"query parsing"过程。它不支持字段名称前缀,通配符或者其它"高级"功能。因为这个缘由,它失败的机会很是小/不存在,而且它提供一个优秀的行为当它只分析和
运行该文本做为查询行为(一般是一个文本搜索框)。此外phrase_prefix类型能够提供一个很好的"即时"行为来自动加载搜索结果。
原文地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html