ElasticSearch match, match_phrase, term區別


1.term結構化字段查詢,匹配一個值,且輸入的值不會被分詞器分詞。

  比如查詢條件是:

{
    "query":{
        "term":{
            "foo": "hello world"
        }
    }
}

那么只有在字段中存儲了“hello world”的數據才會被返回,如果在存儲時,使用了分詞,原有的文本“I say hello world”會被分詞進行存儲,不會存在“hello world”這整個詞,那么不會返回任何值。

但是如果使用“hello”作為查詢條件,則只要數據中包含“hello”的數據都會被返回,分詞對這個查詢影響較大。

2.match_phase習語匹配,查詢確切的phase,在對查詢字段定義了分詞器的情況下,會使用分詞器對輸入進行分詞,然后返回滿足下述兩個條件的document:

  1.match_phase中的所有term都出現在待查詢字段之中

  2.待查詢字段之中的所有term都必須和match_phase具有相同的順序

{ "foo":"I just said hello world" }

{ "foo":"Hello world" }

{ "foo":"World Hello" }

使用match_phase:

{
  "query": {
    "match_phrase": {
      "foo": "Hello World"
    }
  }
}

會返回前兩條文檔。

3.match模糊匹配,先對輸入進行分詞,對分詞后的結果進行查詢,文檔只要包含match查詢條件的一部分就會被返回。

4.query_string語法查詢,同match_phase的相同點在於,輸入的查詢條件會被分詞,但是不同之處在與文檔中的數據可以不用和query_string中的查詢條件有相同的順序。


免責聲明!

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



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