继续上篇文章继续介绍ES的查询语法。
全文查询这个名词相信大家都听说过,这些查询用于搜索整个文本,比如一个章节或一篇新闻文章。此查询根据与特定索引或文档关联的分析器工作。在本节中,我们将讨论不同类型的全文查询。
ES主要通过下面这些进行匹配查询:
1.match:执行全文查询的标准查询,包括模糊匹配和短语或接近查询。
2.match_phrase:类似于match,但用于匹配精确的短语或单词。
3.match_phrase_prefix:在最后一个单词上执行通配符搜索。
4.multi_match:match的多字段版本。
5.terms:一种更专门的查询,它对不常见的词有更多的性能。
7.query_string:支持紧凑的Lucene查询字符串语法,允许您在单个查询字符串中指定AND/OR/NOT条件和多字段搜索。
8.simple_query_string:query_string的一个更简单、更健壮的版本。
match
match查询的结果是bool。这意味着分析提供的文本,分析过程从提供的文本构造一个bool查询。可以将operator符标记设置为or或and控制布尔子句(默认为or)。可以使用minimum_should_match参数设置要匹配的可选should子句的最小数量。可以设置analyzer来控制哪个分析器将对文本执行分析过程,默认为字段显式映射定义或默认搜索分析器。
lenient参数可以设置为true以忽略由数据类型不匹配引起的异常,例如尝试用文本查询字符串查询数值字段,默认值为false。
下面是一个简单的示例:
{ "query":{ "match" : { "description":"a good phone" } } }
一个带有参数的示例:
{ "query": { "match" : { "description" : { "query" : "a good phone", "operator" : "and" } } } }
如果使用的分析器类似stop这样的过滤器删除查询中的所有标记,那默认是根本不匹配文档。为了更改这样的情况,可以使用zero_terms_query选项,它接受none(默认)和所有与match_all查询相对应的选项:
{ "query": { "match" : { "message" : { "query" : "a good phone", "operator" : "and", "zero_terms_query": "all" } } } }
match还支持使用cutoff_frequency指定一个绝对或相对Document频率以进行子查询。
该查询允许在运行时动态处理stopword,独立于域并且不需要stopword文件。它阻止了对高频术语的评分/迭代,并且只在更重要/更低频率的术语与文档匹配时才会考虑这些术语。然而,如果所有查询条件都高于给定的cutoff_frequency,则查询将自动转换为纯连接and查询,以确保快速执行。
下面的例子显示了一个由stopwords组成的查询:
{ "query": { "match" : { "message" : { "query" : "a good phone", "cutoff_frequency" : 0.001 } } } }
cutoff_frequency选项在每个shard级别上运行。这意味着,当在Document编号较低的测试Index上测试时,您应该遵循相关的建议。
match查询支持使用synonym_graph令牌过滤器进行多术语同义词扩展。
当使用此筛选器时,解析器为每个多术语同义词创建一个短语查询。也可以将多术语同义词与连词匹配:
{ "query": { "match" : { "message": { "query" : "a,good,phone", "auto_generate_synonyms_phrase_query" : false } } } }
关于match讲到这里就结束了,主要介绍match的用法,以及配它使用的几个参数。
版权所属,如需转载,请注明出处:搜闲鱼