Elasticsearch----Query DSL

基本語法

{
    QUERY_NAME:{
        ARGUMENT:VALUE,
        ARGUMENT:VALUE,
        ...
    }
}
{
    QUERY_NAME:{
        FIELD_NAME:{
            ARGUMENT:VALUE,
            ARGUMENT:VALUE,
            ...
        }
    }
}

示例

GET /_search    //查詢所有的,默認只會顯示10條document
{
  "query":{
    "match_all": {}
  }
}

GET /test_index/test_type/_search    //查詢字段“test_field”,包含“test”
{
  "query": {
    "match": {
      "test_field": "test"
    }
  }
}

組合搜索多個條件

//模擬數(shù)據(jù)
PUT /website/article/1
{
  "title":"my elasticsearch article",
  "content":"es is very good",
  "author_id":110
}
PUT /website/article/2
{
  "title":"my hadoop article",
  "content":"hadoop is very bad",
  "author_id":111
}
PUT /website/article/3
{
  "title":"my elasticsearch article",
  "content":"es is very bad",
  "author_id":112
}
//查詢 title必須包含elasticsearch,content可以不包含elasticsearch,author_id必須不為110
GET /website/article/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "elasticsearch"
          }
        }
      ],
      "should": [
        {
         "match": {
           "content":"elasticsearch"
         }
        }
      ],
      "must_not": [
        {
          "match": {
            "author_id": 110
          }
        }
      ]
    }
  }
}
//查詢title,content包含elasticsearch
GET /website/article/_search
{
  "query": {
    "multi_match": {
      "query": "elasticsearch",
      "fields": ["title","content"]
    }
  }
}
//查詢title,content必須包含elasticsearch,并且author_id必須不為110的
GET /website/article/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "multi_match": {
            "query": "elasticsearch",
            "fields": ["title","content"]
          }
        }
      ],
      "must_not": [
        {
          "match": {
            "author_id": 110
          }
        }
      ]
    }
  }
}

定位不合法的搜索以及原因

//以這樣的語法,來判斷一個查詢json串是否合法
GET /test_index/test_type/_validate/query?explain
{
  "query":{
    "math":{
      "test_field":"test"
    }
  }
}
//出錯返回值
{
  "valid": false,
  "error": "org.elasticsearch.common.ParsingException: no [query] registered for [math]"
}
//正確返回值
{
  "valid": true,
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "explanations": [
    {
      "index": "test_index",
      "valid": true,
      "explanation": "+test_field:test #(#_type:test_type)"
    }
  ]
}

filter與query的對比

//模擬數(shù)據(jù)
PUT /company/employee/1
{
  "address":{
    "country":"china",
    "provice":"beijing",
    "city":"beijing"
  },
  "name":"jack",
  "age":28,
  "join_date":"2017-01-01"
}
PUT /company/employee/2
{
  "address":{
    "country":"china",
    "provice":"jiangsu",
    "city":"nanjing"
  },
  "name":"tom",
  "age":30,
  "join_date":"2016-01-01"
}
PUT /company/employee/3
{
  "address":{
    "country":"china",
    "provice":"shanxi",
    "city":"xian"
  },
  "name":"marry",
  "age":35,
  "join_date":"2015-01-01"
}
//查詢年齡大于等于30,同時join_date必須是2016-01-01
GET /company/employee/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "join_date": "2016-01-01"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 30
          }
        }
      }
    }
  }
}

filter與query的對比

  • filter,僅僅只是按照搜索條件過濾出需要的數(shù)據(jù)而已,不計算任何相關度分數(shù),對相關度沒有任何影響
  • query,會去計算每個document相對于搜索條件的相關度,并按照相關度進行排序
  • 一般來說,如果是在進行搜素,需要將最匹配搜索條件的數(shù)據(jù)先返回,那么用query;如果只是要根據(jù)一些條件篩選出一部分數(shù)據(jù),不關注其排序,那么用filter
  • 如果你希望越符合這些搜索條件的document越排在前面返回,那么這些搜索條件就要放在query中;如果不希望一些搜索條件來影響你的document排序,那么就放在filter中即可
  • filter不需要計算相關度分數(shù),不需要按照相關度分數(shù)進行排序,同時還有內(nèi)置的自動cache最常使用filter的數(shù)據(jù);query則相反,要計算相關度分數(shù),還需要按照分數(shù)排序,而且無法cache結果。所以,filter的速度會更快些
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • 教你如何迅速秒殺掉:99%的海量數(shù)據(jù)處理面試題 本文經(jīng)過大量細致的優(yōu)化后,收錄于我的新書《編程之法》第六章中,新書...
    Helen_Cat閱讀 7,585評論 1 39
  • 歡迎訪問我的博客查看原文:http://wangnan.tech 注:文本整理自《ELKstack權威指南》 目錄...
    GhostStories閱讀 10,918評論 0 7
  • Solr&ElasticSearch原理及應用 一、綜述 搜索 http://baike.baidu.com/it...
    樓外樓V閱讀 7,641評論 1 17
  • 狀態(tài)碼用來告訴HTTP客戶端,HTTP服務器是否產(chǎn)生了預期的Response. HTTP/1.1中定義了5類狀態(tài)碼...
    Jackson_Z閱讀 330評論 0 0

友情鏈接更多精彩內(nèi)容