Elasticsearch查询语句,远比你想象的多

前言

之前谈过 Elasticsearch 的基本概况,还有服务端和客户端的使用,这一篇该到重点了---查询语句。正所谓--无搜索,无Elasticsearch,至少,我是这么认为的。那么,ES的搜索语句有哪些呢?其实,它们比你想象中的多!

一.全文本查询

1) 例如:查询全部数据,按number顺序排序,并从第11条开始,取10条

GET /demo/_search(为方便展示,除特别表示,以下皆用此样例做请求接口)

{

"query":{

"match_all":{

}

},

"sort":[

{

"number":"asc"

}

],

"from":10,

"size":10

}

2)单字段查询,例子:查询query_field里含有value全部或部分字符串的数据

{

"query":{

"match":{

"query_field":"value"

}

}

}

3)单字段查询,例子:完全匹配value值

{

"query":{

"match_phrase":{

"query_field":"value"

}

}

}

4)多字段模糊匹配查询,例:在country和name两个字段里模糊匹配value值

{

"query":{

"multi_match":{

"query":"value",

"fields":[

"country",

"name"

]

}

}

}

5)语法查询,组合and or 等逻辑词,例:

{

"query":{

"query_string":{

"query":"(China AND Ada) OR 18"

}

}

}

可以指定字段:

{

"query":{

"query_string":{

"query":"Chine OR Ada",

"fields":[

"country",

"name"

]

}

}

}

二。字段级查询

1)字段查询,例:查询age字段为18的数据 (term是完全匹配检索, 要用在不分词的字段上, 如果某个field在映射中被分词了, term检索将不起作用.

所以, 不分词的field, 要在mapping中设置为 false,即 indes ->false )

{

"query":{

"term":{

"age":18

}

}

}

2) terms 检索,terms,相当于多个term检索, 类似于SQL中in关键字的用法, 即在某些给定的数据中检索,例:

{

"query":{

"terms":{

"keyword":[

"Java编程思想",

"Java并发编程的艺术"

]

}

}

}

3)范围查询,例:查age字段大于等于18,小于30的数据

{

"query":{

"range":{

"age":{

"gte":18,

"lt":30

}

}

}

}

三。其他复合查询

1)主要是bool查询,条件有should、must、must_not等,可以组合filter

例子1:name字段模糊匹配test,或country字段模糊匹配China,并筛选出age字段大于18 的数据

{

"query":{

"bool":{

"should":[

{

"match":{

"name":"test"

}

},

{

"match":{

"country":"China"

}

}

],

"filter":[

{

"range":{

"age":{

"gt":18

}

}

}

]

}

}

}

例子2:在所有数据里(一般默认最多出来10000条,可配置),查询余额大于2万小于3万的数据

{

"query":{

"bool":{

"must":{

"match_all":{

}

},

"filter":{

"range":{

"balance":{

"gte":20000,

"lte":30000

}

}

}

}

}

}

例子3. boost评分权重 - 控制文档的优先级别

通过boost参数, 令满足某个条件的文档的得分更高, 从而使得其排名更靠前.例:

{

"query": {

"bool": {

"must": [

{"match": {"name":"编程秘籍"} }

],

"should": [

{

"match": {

"name": {

"query":"艺术",

"boost":2// 提升评分权重

                        }

                    }

                }

            ]

        }

    }

}

2)多重查询,例:

POST /_msearch

{"index":"my_test1"}

{"query":{"match_all":{}}}

{"index":"my_test2"}

{"query":{"match":{"name":"张三"}}}

3)异步查询,例:

POST /demo_index/_async_search?size=0

{

"sort":[

{

"date":{

"order":"asc"

}

}

],

"aggs":{

"sale_date":{

"date_histogram":{

"field":"date",

"calendar_interval":"1d"

}

}

}

}


至此,关于ES的搜索语句就介绍到这里了,下回该讲讲别的了吧~


你可能感兴趣的:(Elasticsearch查询语句,远比你想象的多)