首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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的搜索语句就介绍到这里了,下回该讲讲别的了吧~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200620A0M08Q00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券