ElasticSearch:经常使用的基础查询与过滤器

match_all(获取全部索引文档)html

quert_string(获取包含指定关键字文档)
默认查询_all字段,_all字段是由全部字段组合而成的,能够经过description:关键字,获取经过请求的时候来设置default_field。可以使用AND和OR这种布尔操做符来组合词条搜索,也可使用减号(-)来排除文档。elasticsearch

缺点:因为query_string能够经过组合条件来获取全部索引的文档,建议替换成term,terms,match或者multi_match查询spa

term查询和term过滤器
term能够指定搜索的文档字段和关键词(被搜索的关键词是没有通过分析的,因此返回的文档是精准匹配关键词的)term过滤器也能够是返回的结果包含指定关键词,可是无需计算得分,因此可使用match_all,返回的全部文档_score都是1.0分。htm

terms查询
与term查询类似,容许查询多个关键词,经过minimum_should_match设置最低匹配几个关键词。索引

match查询
查询指定字段的关键词,也能够查询_all字段,match查询有多中方式,最多见的是布尔查询和词组。ip

一、布尔查询
默认状况下,match查询使用布尔行为和OR操做符。例如,若是搜索文本“Elasticsearch Denver”,Elasticsearch 会搜索“Elasticsearch OR Denver”,同时匹配“Elasticsearch Amsterdam’和“Denver Clojure Group”聚合分组。为了搜索同时包含“Elasticsearch” 和“Denver” 关键词的结果,将match字段的name修改成一个映射,并将operator字段设置为and,达到改变操做符的目的。rem

二、词组
在文档中搜索指定的词组时,phrase查询是很是有用的,每一个单词的位置之间能够留有余地。这种余地称做slop,用于表示词组中多个分词之间的距离。假设你试图记起某个聚合分组的名字,只记得“Enterprise” 和“London” 两个词,可是不记得名字其他的部分了。你能够搜.索词组“enterprise london”,将slop设置为1或者2,而不是默认的0,如此-一来,没有必要知道分组的精确标题,就能够寻找包含该词组的结果。文档


phrase_prefix查询匹配最后一个关键词。在下面的例子中,phrase_ prefix查询使用的是“elasticsearch den”。Elasticsearch 使用“den”文本进行前缀匹配,查找全部name字段,发现那些以“den” 开始的取值(如“Denver”)。 因为产生的结果多是个很大的集合,须要限制扩展的数量。


使用multi_ match来匹配多个字段
尽管很容易联想到,multi_ match查询和搜索单字段中多个匹配的词条查询,它们的行为表现会很是相像,可是二者的行为仍是有细微的区别。多字段匹配容许你搜索多个字段中的值。在聚合的案例中,这一点很是有用,能够同时在分组的名称和描述中搜索某个字符串。字符串

做者:onlooker
来源:三无青年博客
原文: https://www.35youth.cn/724.html 版权声明:本文为博主原创文章,转载请附上博文连接!
相关文章
相关标签/搜索