天天看点

search搜索语句之结构化查询语句DSL

结构化查询语句DSL的使用,bool,filter查询等

新增数据集

curl -XPUT -H "Content-Type: application/json" 'localhost:9201/blog/article/7?pretty' -d '

{

  "title": "elk搭建日志采集系统",

  "content":"elk elasticsearch logstash kibana",

  "PV":18

}'

什么是query DSL

                   1、Domain Specific Language 领域特定语言

                   2、Elasticsearch提供了完整的查询DSL,基于JSON定义查询

                   3、用于构造复杂的查询语句

url查询(空格处理不当,会出问题)

curl -XPOST -H "Content-Type: application/json" 'http://localhost:9201/blog/article/_search' -d '{

    "query" : {

        "term" : { "title" : "elk" }

    }

}'      

         建议使用postman工具

                   post方式提交,增加http头信息

                   body里面选row格式,粘贴对应的dsl即可

search搜索语句之结构化查询语句DSL

bool查询入门  

                   {

                     "query": {

                       "bool": {

                         "must": [

                           { "match": { "title": "elk" } }

                         ],

                         "must_not": [

                           { "match": { "title": "小D" } }

                         ]

                       }

                     }

                   }

filter查询入门(filtered语法已经在5.0版本后移除了,在2.0时候标记过期,改用filter )

         参考地址:https://www.elastic.co/guide/en/elasticsearch/reference/5.0/query-dsl-filtered-query.html

         {

           "query": {

             "bool": {

               "filter": {

                 "range": {

                   "PV": {

                     "gt": 15

                   }

                 }

               },

               "must": {

                 "match": {

                   "title": "ELK"

                 }

               }

             }

           }

         }

         总结:(官网参考 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html)

                   1、大部分filter的速度快于query的速度

                   2、filter不会计算相关度得分,且结果会有缓存,效率高

                   3、全文搜索、评分排序,使用query

                   4、是非过滤,精确匹配,使用filter

es

继续阅读