1.term主要用于精确匹配哪个值,例如数字、日期、布尔值或not_analyzed字符串(未分析的文本数据类型)。
{ ” term ” : { ” age ” :26 } }
2.terms与term有点类似,但terms可以指定多个匹配条件。 如果字段指定了多个值,则必须将文档匹配在一起。
{
” terms ” : {
“tag”: [“search”、“full_text”、“nosql” ]
() ) ) ) )。
() ) ) ) )。
3 .范围过滤允许您在指定范围内搜索数据。
{
” range ” : {
“age”:
” GTE ” :20、
“lt”:30
() ) ) ) )。
() ) ) ) )。
() ) ) ) )。
4 .与SQL语句中的IS_NULL条件一样,4.exists和missing筛选器可用于确定文档是否包含指定字段或没有字段。
{
” exists ” : {
字段:标题
() ) ) ) )。
() ) ) ) )。
这两个过滤仅用于已经检测到的数据,但如果要区分是否存在某个字段,则使用这两个过滤。
5.bool过滤是一种布尔逻辑,用于合并多个筛选条件查询结果,包括以下运算符:
must :多个查询条件的完全匹配相当于and。
must_not :多个查询条件的相反匹配相当于not。
should :中至少有一个查询条件匹配,相当于or。 should
子句(查询)必须出现在匹配的文档中。 如果bool查询位于查询上下文中且具有mustor filter子句,则即使should查询不匹配,bool也会匹配文档。 在这种情况下,这些条款仅用于影响分数。 如果bool查询是筛选器上下文,或者两者都不存在,则“must”和“filter”中的至少一个should查询必须与文档匹配才能与bool查询匹配。 可以通过设置minimum_should_match参数显式控制此行为。
这些参数可以分别继承筛选条件或筛选条件数组。
{
“bool”: {
“must”: {“term”: {“文件夹”:“inbox”},
” must _ not ” : { ” term ” : { ” tag ” : ” spam ” },
“should”: [
{ ” term ” : { ” starred ” : true },
{ ” term ” : { ” unread ” : true } }
() ]
() ) ) ) )。
() ) ) ) )。
6.match_all查询可以查询所有文档,并且是没有查询时的默认语句。
{
“match _ all”: { }
() ) ) ) )。
此查询经常用于联接筛选条件。 例如,得到的_score为1,因为必须搜索所有邮箱,并且所有文档的相关性都相同。
7.match查询是一种标准查询,无论是需要全文搜索查询还是需要精确查询,基本上都使用该查询。
使用match查询全文字段时,分析器会在实际查询之前分析match中的查询字符。
{
” match ” : {
“tweet”:“aboutsearch”
() ) ) ) )。
() ) ) ) )。
如果在match中指定确切的值,当遇到数字、日期、布尔值或not_analyzed字符串时,它将搜索指定的值。
{ ” match ” 3360 { ” age ” :26 } }
{“match”3360 {“date”: ” 2014-09-01 ” }
{ ” match ” 3360 { ” public ” : true } }
{“match”3360 {“tag”:“full _ text”}
提示:在进行准确的匹配搜索时,建议使用过滤器语句。 因为过滤器语句可以缓存数据。
match查询仅查找指定了准确字段的准确值。 为了避免语法错误,必须指定正确的字段名。
8.multi_match查询允许您在执行match查询的同时搜索多个字段,并同时检查多个字段中的一个。
{
“multi _ match”: {
“query”:“全文本搜索”、
“fields”: [“title”,“body” ]
() ) ) ) )。
() ) ) ) )。
9.bool查询类似于bool过滤器,用于连接多个查询子句。 不同之处在于,bool过滤可以直接指示匹配是否成功,而bool查询计算每个查询子句的_score (相关分数)。
must:查询指定必须包括文档。
must_not:查询指定不包含文档。
should:查询指定文档,如果有,可以指向文档的关系。
在以下查询中,您将看到title字段包含” how to make millions “,而” tag “字段未标记为spam。 如果显示“starred”,或者发布日期截止到2014年,则这些匹配的文档将相同
类网站等级高:
{
“bool”: {
“must”: { “match”: { “title”: “how to make millions” }},
“must_not”: { “match”: { “tag”: “spam” }},
“should”: [
{ “match”: { “tag”: “starred” }},
{ “range”: { “date”: { “gte”: “2014-01-01” }}}
]
}
}
提示: 如果bool 查询下没有must子句,那至少应该有一个should子句。但是 如果有must子句,那么没有should子句也可以进行查询。
10.短语匹配(Phrase Matching),kldsy需要寻找邻近的几个单词时,你会使用match_phrase查询:
GET /my_index/my_type/_search
{
“query”: {
“match_phrase”: {
“title”: “quick brown fox”
}
}
}
和match查询类似,match_phrase查询首先解析查询字符串来产生一个词条列表。然后会搜索所有的词条,
但只保留含有了所有搜索词条的文档,并且词条的位置要邻接。一个针对短语quick fox的查询不会匹配
我们的任何文档,因为没有文档含有邻接在一起的quick和box词条。
match_phrase查询也可以写成类型为phrase的match查询:
“match”: {
“title”: {
“query”: “quick brown fox”,
“type”: “phrase”
}
}
11.constant_score:通常当查找一个精确值的时候,我们不希望对查询进行评分计算。只希望对文档进行包括或排除的计算,所以我们会使用 constant_score 查询以非评分模式来执行 term 查询并以一作为统一评分。
最终组合的结果是一个 constant_score 查询,它包含一个 term 查询:
GET /my_store/products/_search
{
“query” : {
“constant_score” : {
“filter” : { “term” : { “price” : 20 } } }}
}