1. 程式人生 > >elasticsearch⑤基本用法-高階查詢

elasticsearch⑤基本用法-高階查詢

  • 子條件查詢:特定欄位所指特定值
  • 複合條件查詢:以一定的邏輯組合子條件查詢

子條件查詢:

  • query context
    在查詢過程中,除了判斷文件是否滿足查詢條件外,ES還會計算一個_score來標識匹配程度
  • 全文字查詢:針對文字型別資料
    ①模糊匹配match

    關鍵字match會匹配到elasticsearch或者入門相關的詞
    {
    “query”:{
    “match”:{
    “title”:”elasticsearch入門”
    }
    }
    }

    ②短語匹配

    關鍵字match_phrase,被匹配的詞中必須有“elasticsearch入門”,並且詞語結構和順序都要一樣,比如”elasticsearch快速入門”是無法匹配的
    {
    “query”:{
    “match_phrase”:{
    “title”:”elasticsearch入門”
    }
    }
    }

    ③多個欄位匹配查詢

    關鍵字multi_match.query後跟的是查詢條件,fields後面是需要查詢的欄位(此處用中括號“]”)
    {
    “query”:{
    “multi_match”:{
    “query”:”悟空”,
    “fields”:[“author”,”title”]
    }
    }
    }

    ④語法查詢

    關鍵字query_string, 可以在條線中用“OR” ,”AND” (注意大寫)
    {
    “query”:{
    “query_string”:{
    “query”:”悟空 OR 李四”,
    “fields”:[“author”,”title”]
    }
    }
    }

  • 欄位級別查詢:針對結構化資料,入數字,日期等
    ①普通查詢

    關鍵字term,
    {
    “query”:{
    “term”:{
    “word_count”:5000
    }
    }
    }

    ②範圍查詢,可以用於數字和時間(時間可以用“now”表示現在)

    gte大於等於,lte小於等於。(e=equals表示等於),
    {
    “query”:{
    “range”:{
    “word_count”:{
    “gte”:100,
    “lte”:5000
    }
    }
    }
    }

  • filter context
    在查詢過程中,只判斷該文件是否滿足條件。只有yes或者no

    filter是elasticsearch用來做資料過濾的,而且對資料進行快取,需要結合bool使用
    {
    “query”:{
    “bool”:{
    “filter”:{
    “term”:{
    “word_count”:500
    }
    }
    }
    }
    }

    複合條件查詢

  • 固定分數查詢:關鍵字constant_score

    固定分數查詢只支援filter用來過濾資料,boots用來指定匹配度(匹配分數)。我用的6的版本,如果不知道的話查詢的資料都是1
    {
    “query”:{
    “constant_score”:{
    “filter”:{
    “match”:{
    “title”:”elasticsearch人門”
    }
    },
    “boost”:0.6931472
    }
    }
    }

  • 布林查詢
    ①,should表示應當,內部的match是“或”的關係

    {
    “query”:{
    “bool”:{
    “should”:[
    {
    “match”:{
    “author”:”李四”
    }
    },
    {
    “match”:{
    “title”:”elasticsearch”
    }
    }
    ]
    }
    }
    }

    ②,must表示必須,內部的match是“與”的關係.

    {
    “query”:{
    “bool”:{
    “must”:[
    {
    “match”:{
    “author”:”李四”
    }
    },
    {
    “match”:{
    “title”:”elasticsearch”
    }
    }
    ]
    }
    }
    }

    ③ must_not 相當於“非”,必須不是條件中的資料

    {
    “query”:{
    “bool”:{
    “must_not”:[
    {
    “match”:{
    “author”:”李四”
    }
    },
    {
    “match”:{
    “title”:”elasticsearch”
    }
    }
    ]
    }
    }
    }

群號:790579479,只限交流,歡迎大神前來指點