记录一些es 简单查询

1,term 查询

term主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经分析的文本数据类型)。

term不会分词,而keyword字段也不分词,需要完全匹配才可。
因为text字段会分词,而term不分词,所以term查询的条件必须是text字段分词后的某一个。
例如:

{
“term”:{
“ID”:“b3847108-1026-4878-a4cc-fd3566e4c5f2”
}
}

2,terms 查询

terms 跟 term 有点类似,但 terms 允许指定多个匹配条件。如果某个字段指定了多个值,那么文档需要一起去做匹配:

例如:
{
“query”:{
“terms”:{
“ID”:[
“b3847108-1026-4878-a4cc-fd3566e4c5f2”,
“defc0177-5553-4299-8bbd-b3ddb362d2cc”
]
}
}
}

3,rang 查询

range过滤允许我们按照指定范围查找一批数据。
例如:
{
“query”:{
“range”:{
“PUBDATE”:{
“gte”:“2020-06-10 17:18:28”,
“lte”:“2020-06-10 17:19:28”
}
}
},
“size”:1,
“from”:0
}

gt :: 大于
gte:: 大于等于
lt :: 小于
lte:: 小于等于
4,exists 和 missing 过滤

exists 和 missing 过滤可以用于查找文档中是否包含指定字段或没有某个字段,类似于SQL语句中的IS_NULL条件。

这两个过滤只是针对已经查出一批数据来,但是想区分出某个字段是否存在的时候使用。
例如:
{
“query”:{
“exists”:{
“field”:“title”
}
},
“size”:1,
“from”:0
}

title在数据库中不存在

TITLE 在数据库中存在
{
“query”:{
“exists”:{
“field”:“TITLE”
}
},
“size”:1,
“from”:0
}

5,bool查询

bool 查询与 bool 过滤相似,用于合并多个查询子句。不同的是,bool 过滤可以直接给出是否匹配成功, 而bool 查询要计算每一个查询子句的 _score (相关性分值)。
例如:
{
“query”:{
“bool”:{
“must”:[
{
“match”:{
“TITLE”:“世界”
}
}
],
“must_not”:[

        ],
        "should":[

        ]
    }
},
"size":1,
"from":0

}

6,match_all 查询

匹配全部内容查询。
{
“query”:{
“match_all”:{

    }
},
"size":1,
"from":0

}

7,match 查询
match会被分词,而keyword不会被分词,match的需要跟keyword的完全匹配可以。
例如:
{
“query”:{
“match”:{
“TITLE”:“世界”
}
},
“size”:1,
“from”:0
}

8,bool过滤

相当于sql的 or and 查询
例如:
{
“query”:{
“bool”:{
“should”:[
{
“match”:{
“TITLE”:“世界”
}
},
{
“match”:{
“CONTENT”:“编程”
}
},
{
“match”:{
“SOURCETYPE”:1
}
}
],
“minimum_should_match”:2
}
},
“size”:1,
“from”:0
}

可以通过 minimum_should_match 指定匹配的should的个数.
must :: 多个查询条件的完全匹配,相当于 and。
must_not :: 多个查询条件的相反匹配,相当于 not。
should :: 至少有一个查询条件匹配, 相当于 or。
9,wildcards 查询
例如:以下查询能够匹配包含山西的文档:
{
“query”:{
“wildcard”:{
“TITLE”:“山西*”
}
},
“size”:1,
“from”:0
}

10,regexp 查询

假设您只想匹配以[0-9]开头后面任意的字符串。使用regexp查询能够让你写下更复杂的模式:
{
“query”:{
“regexp”:{
“SOURCETYPE”:"[0-9].*"
}
},
“size”:1,
“from”:0
}

11,prefix 查询

以什么字符开头的,可以更简单地用 prefix,如下面的例子:
{
“query”:{
“prefix”:{
“TITLE”:“山西”
}
},
“size”:1,
“from”:0,
“_source”:{
“include”:[
“TITLE”
]
}
}

12,Phrase Matching

在DSL中, 通过match_phrase短语匹配达到精确匹配的目的 —— 不会对查询串进行分词, 而是直接精确匹配查找.
{
“query”:{
“match_phrase”:{
“TITLE”:“我是”
}
},
“size”:1,
“from”:0,
“_source”:{
“include”:[
“TITLE”
]
}
}

13,query_string

query的内容会经过分析。
{
“query”:{
“query_string”:{
“default_field”:“TITLE”,
“query”:"(山西 AND 人民) OR 检查"
}
},
“size”:1,
“from”:0,
“_source”:{
“include”:[
“TITLE”
]
}
}

default_operator:默认运算符
query: 需要查询的具体内容
default_field: 查询的字段
minimum_should_match:最小匹配词条
默认是_all,即对所有字段进行查询。
常见写法:
{“query”:{“query_string”:{“name:ob”}}}
name字段为ob
{“query”:{“query_string”:{“nam\*:ob”}}}
存在一个nam开头的字段,值为ob
{“query”:{“query_string”:{“missing:name”}}}
name字段值为null的文档
{“query”:{“query_string”:{“exists:name”}}}
name字段值不为null的文档
{“query”:{“query_string”:{“name:(o OR xi)”}}}
name字段为Ob或者xi的文档
14,simple_query_string

term之间默认的关系是OR,可以指定Operator

  • 代替 AND
    | 代替 OR
  • 代替 NOT
    {
    “query”:{
    “simple_query_string”:{
    “fields”:[
    “TITLE”
    ],
    “query”:"(山西 + 人民) | 检察"
    }
    },
    “size”:1,
    “from”:0,
    “_source”:{
    “include”:[
    “TITLE”
    ]
    }
    }

公众号
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值