Elasticsearch查询语句

下面的查询语句都是在 Elasticsearch-head中执行。

先往elsearch中添加一些数据

{

"name":"aaa",

"sex":1,

"address":"西安"

}

{

"name":"bbb",

"sex":1,

"address":"深圳"

}

{

"name":"ccc",

"sex":2,

"address":"北京"

}

{

"name":"ddd",

"sex":2,

"address":"上海"

}

Elasticsearch查询语句

1.matcch_all 查询

match_all查询是elsearch最简单的查询,它用来匹配elsearch中所有的文档,具体命令如:

{

"query":{

"match_all":{}

}

}

将命令在head插件中直接插件,结果如图:

Elasticsearch查询语句

2.term查询

term查询是在索引中搜索与输入查询条件完全匹配的文档

{

"query": {

"term": {

"name": "aaa"

}

}

}

执行结果如下:

Elasticsearch查询语句

这里说明一下中文搜索的问题。上面的搜索,是根据名字来搜索,是字母,没有中文,如果用相同的语句来搜索address,就没有结果。

{

"query": {

"term": {

"address": "西安"

}

}

}

Elasticsearch查询语句

这是因为:elasticsearch 里默认的IK分词器是会将每一个中文都进行了分词的切割,所以你直接想查一整个词,或者一整句话是无返回结果的。

可以将搜索改为

{

"query": {

"term": {

"address.keyword": "西安"

}

}

}

就可以得到我们想要的结果。

Elasticsearch查询语句

3.boolean查询

boolean查询允许我们模拟AND和OR操作,可以使用MUST,MUST_NOT和SHOULD操作符来构造boolean查询。MUSH和MUST_NOT负责过滤出结果集中满足和不满足条件的数据。默认情况下,SHOULD要检查它的多个条件中至少满足一个才会返回数据。

比如查询 sex=1的用户:

{

"query":{

"bool":{

"must":{

"term":{"sex":1}

}

}

}

}

Elasticsearch查询语句

查询sex=1且不在西安的用户:

Elasticsearch查询语句

查询sex=1,地址在西安或者深圳的用户:

{

"query": {

"bool": {

"must": {

"term": {

"sex": 1

}

},

"should": [

{

"term": {

"address.keyword": "西安"

}

},

{

"term": {

"address.keyword": "深圳"

}

}

]

}

}

}

Elasticsearch查询语句

4.match查询

查询与搜索条件匹配的文档,默认情况下,match查询是一个使用了or操作符的boolean类型的查询

如查询 address 是 西安 或者 深圳 的用户

{

"query": {

"match": {

"address": {

"query": "西安 深圳"

}

}

}

}

Elasticsearch查询语句

5.range查询

range查询半按照指定字段值的范围进行匹配。我们可以使用gt,gte,lt,lte操作符来定义这个范围。这几个操作符分别表示:大于,大于等于,小于,小于等于

比如,查询sex大于1的数据:

{

"query": {

"range": {

"sex" : {

"gt" : 1

}

}

}

}

Elasticsearch查询语句

查询大于等于2且小于5的数据

{

"query": {

"range": {

"sex": {

"gte": 2,

"lt": 5

}

}

}

}

由于我们测试数据的问题,这里还只会列出来大于等于2的数据。

6.wildcard查询

wildcard查询是在字段上使用通配符表达式来进行查询。你可以使用 * 匹配不限数量的所有字符,? 可以匹配所有字符,与 * 不同的是它只能匹配单个字符

比如:查询name以a开头的用户:

{

"query": {

"wildcard": {

"name": {

"value": "a*"

}

}

}

}

Elasticsearch查询语句

如果将上面查询语句中的 * 改为 ? ,就匹配不到结果

Elasticsearch查询语句

因为?只匹配单个字符。

上面只是一些基本的查询类型,elsearch还支持更多不同类型的查询,以后有机会再补充。


分享到:


相關文章: