Elasticsearch學習系列之term和match查詢


轉載自:https://www.cnblogs.com/zhaijunming5/p/6427100.html

一種是像傳遞URL參數一樣去傳遞查詢語句,被稱為簡單查詢

GET /library/books/_search //查詢index為library,type為books的全部內容
GET /library/books/_search?q=price:10 //查詢index為library,type為books中price等於10的

另一種是DSL語句來進行查詢,被稱為DSL查詢,term和match就屬於DSL

term查詢

term是代表完全匹配,即不進行分詞器分析,文檔中必須包含整個搜索的詞匯

格式

復制代碼
GET /library/books/_search       #這里是變化的,指定index和type;(比如說index為library,type為books)
{
  "query": {
    "term": {
        "key": "value"              #這里是變化的,比如說查詢title等於elasticsearch的內容
      }
    }
}
復制代碼

實例1:查詢index為library,type為books重title等於elasticsearch的內容

復制代碼
GET /library/books/_search
{
  "query": {
    "term": {
        "title": "elasticsearch"
    }
  }
}
復制代碼

match查詢

match和term的區別是,match查詢的時候,elasticsearch會根據你給定的字段提供合適的分析器,而term查詢不會有分析器分析的過程

match查詢相當於模糊匹配,只包含其中一部分關鍵詞就行

格式

復制代碼
GET /library/books/_search 
{
    "query":{
        "match":{
            "key":"value"      
        }
    }
}
復制代碼

實例1:過濾出preview字段中包含"elasticsearch"的索引,並且只顯示preview和title字段

復制代碼
GET /library/books/_search 
{
    "fields":["preview","title"]
    "query":{
        "match":{
            "preview":"elasticsearch"      
        }
    }
}
復制代碼

match_all查詢

查詢指定索引下的所有文檔

實例1:過濾出index為library,type為books的所有文檔

GET /library/books/_search 
{
    "query":{
        "match_all":{}   
        }                                    
}

實例2:通過match_all過濾出所有字段,然后通過partial在過濾出包含preview的字段和排除title,price的字段

復制代碼
GET /library/books/_search 
{
    "partial_fields":{
        "partial":{
            "include":["preview"],         #包含preview字段的文檔
            "exclude":["title,price"]    #排除title,price字段
        },
    "query":{
        "match_all":[]
    }
    }
}
復制代碼

match_phrase查詢

短語查詢,slop定義的是關鍵詞之間隔多少未知單詞

格式

復制代碼
GET /library/books/_search 
{
    "query":{
        "match_phrase" :{
            "query":"Elasticsearch,distributed",
            "slop":2                                 #表示Elasticsearch和distributed之間隔多少單詞
        }
    }
}
復制代碼

multi_match查詢

可以指定多個字段

實例1:查詢title和preview這兩個字段都包含Elasticsearch關鍵詞的文檔

復制代碼
GET /library/books/_search 
{
    "query":{
        "multi_match":{
            "query":"Elasticsearch"
            "fields":["title","preview"]
        }
    }
}
復制代碼

filter過濾查詢

查詢同時,通過filter條件在不影響打分的情況下篩選出想要的數據

簡單的filter查詢

實例1:先查詢index為library,type為books的全部文檔;再過濾price等於20的

復制代碼
GET /store/products/_search
{
  "query": {
    "filtered":{
        "query":{
            "match_all": {}  #先查詢index為store,type
        },
        "filter": {
          "term" :{
              "price":20    #這里是條件,price等於20的
          }
        }
    }
  }
}
復制代碼

filter之bool過濾查詢

格式

復制代碼
{
"bool":{
    "must"        : [],
    "should"   : [],
    "must_not" : [],
}
}
#must:條件必須滿足,相當於sql語句的and
#should:條件可以滿足也可以不滿足,相當於sql語句的or
#must_not:條件不需要滿足,相當於sql語句的not
復制代碼

實例1:查詢價格等於20或者productID等於SD1002136的商品,再排除價格等於30的

復制代碼
GET /store/products/_search
{
  "query": {
    "filtered":{
      "filter":{
        "bool":{
          "should": [
            {"term" : {"price" : 20}},
            {"term" : {"productID" : "SD1002136"}}
          ],
          "must_not": {
            "term" :{"price":30}
          }
        }
      
    }
  }
}
}
復制代碼

filter之and,not,or查詢

沒有bool,也可以直接使用and,or,not

實例1:and用法,查詢價格是10元並且productID又是SD1002136的結果

復制代碼
GET /store/products/_search
{
  "query":{
    "filtered":{
      "filter":{
        "and":[
          {
            "term":{
              "price":10
            }
          },
          {
            "term":{
              "productID":"SD1002136"
            }
          }
          ]
      },
      "query":{
        "match_all": {}
      }
    }
  }
  
}
復制代碼

實例2:or用法,查詢價格是10元或者productID是SD4535233的商品

復制代碼
GET /store/products/_search
{
  "query":{
    "filtered":{
      "filter":{
        "or":[
          {
            "term":{
              "price":10
            }
          },
          {
            "term":{
              "productID":"SD4535233"
            }
          }
          ]
      },
      "query":{
        "match_all":{}
      }
    }
  }
}
復制代碼

實例3:not用法,查詢productID不是SD1002136的商品

復制代碼
GET /store/products/_search
{
  "query":{
    "filtered":{
      "filter":{
        "not":{
          "term":{
            "productID":"SD1002136"
          }
        }
      },
      "query":{
        "match_all": {}
      }
    }
  }
}
復制代碼

filter之range范圍查詢

格式

復制代碼
GET /store/products/_search
{
    "query":{
        "filtered":{
            "filter":{
                "range":{
                    "key":{
                        "條件" : value1
                        "條件": value2
                    }
                }
            }
        }
    }
}
復制代碼

條件

gt : 大於
lt : 小於
gte : 大於等於
lte :小於等於

實例1:查詢price大於等於20小於等於40的結果

復制代碼
GET /store/products/_search
{
    "query":{
        "filtered":{
            "filter":{
                "range":{
                    "price":{
                        "gte" : 20,
                        "lte" : 40
                    }
                }
            }
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM