跟我學Elasticsearch(24) full text和exact value的查詢演示
阿新 • • 發佈:2020-09-04
目錄
我們先寫入三條演示資料
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去倒排索引檢索,因此找到一條資料