1. 程式人生 > 實用技巧 >跟我學Elasticsearch(24) full text和exact value的查詢演示

跟我學Elasticsearch(24) full text和exact value的查詢演示

目錄

    我們先寫入三條演示資料

    PUT /product/book/1
    {
      "post_date": "2020-01-01",
      "title": "my first book"
    }
    
    PUT /product/book/2
    {
      "post_date": "2020-01-02",
      "title": "my second book"
    }
    
    PUT /product/book/3
    {
      "post_date": "2020-01-03",
      "title": "my thrid book"
    }
    

    然後我們嘗試各種搜尋

    (1) GET /product/book/_search?q=2020		#搜尋到3條資料          
    (2) GET /product/book/_search?q=2020-01-01        #搜尋到3條資料
    (3) GET /product/book/_search?q=post_date:2020-01-01   #搜尋到1條資料
    

    接下來我們逐個分析下為什麼會有這些結果出現

    第(1),(2)個查詢用的是_all元資料,三條演示資料進行分詞後所拼接的字串分別為

    “2020-01-01 my first book”,"2020-01-02 my second book",“2020-01-03 my thrid book”

    我看看上面4個查詢

    (1) GET /product/book/_search?q=2020 #搜尋到3條資料

    此時會用2020去上面三個字串找,因此找到三條資料

    (2) GET /product/book/_search?q=2020-01-01 #搜尋到3條資料

    此時會把2020-01-01先分詞成2020,01然後拿2020,01依次去上面三個字串找,因此找到三條資料

    (3) GET /product/book/_search?q=post_date:2020-01-01 #搜尋到1條資料

    post_date預設是date型別,會作為exact value去建立索引

    doc1 doc2 doc3
    2020-01-01 *
    2020-01-02 *
    2020-01-03 *

    而query string會用跟建立倒排索引時一樣的分詞器去進行分詞,因此請求關鍵字2020-01-01分詞完後依然是2020-01-01,2020-01-01去倒排索引檢索,因此找到一條資料