Elasticsearch 深入搜尋

2021-09-13 08:12:43 字數 1798 閱讀 8448

結構化搜尋(structured search) 是指有關探詢那些具有內在結構資料的過程

在結構化查詢中,我們得到的結果 總是非是即否,要麼存於集合之中,要麼存在集合之外。

結構化查詢不關心檔案的相關度或評分;它簡單的對文件包括或排除處理。

當進行精確值查詢時, 我們會使用過濾器(filters)。

term 查詢 數字

我們首先來看最為常用的 term 查詢, 可以用它處理數字(numbers)、布林值(booleans)、日期(dates)以及文字(text)。

post /my_store/products/_bulk}}

}}

sql:查詢具有某個**的所有產品

select document from   products where  price = 20
dsl:

get /my_store/products/_search

}}}get /my_store/products/_search

}}

通常當查詢乙個精確值的時候,我們不希望對查詢進行評分計算。只希望對文件進行包括或排除的計算,所以我們會使用 constant_score 查詢以非評分模式來執行 term 查詢並以一作為統一評分

get /my_store/products/_search

},"boost": 1.2

}}

}

term 查詢 文字

sql:

select product from   products where  productid = "xhdk-a-1293-#fj3"
dsl:

get /my_store/products/_search

},"boost": 1.2

}}}

但這裡有個小問題:我們無法獲得期望的結果。為什麼呢?問題不在 term 查詢,而在於索引資料的方式,

如果我們使用 analyze api (分析 api),我們可以看到這裡的 upc 碼被拆分成多個更小的 token.

get /my_store/_analyze

, , , ]

}

這裡有幾點需要注意:

所以當我們用 term 查詢查詢精確值 xhdk-a-1293-#fj3 的時候,找不到任何文件,因為它並不在我們的倒排索引中,正如前面呈現出的分析結果,索引裡有四個 token 。

為了避免這種問題,我們需要告訴 elasticsearch 該欄位具有精確值,要將其設定成 not_analyzed 無需分析的

delete /my_store 

put /my_store}}

}}get /my_store/products/_search}}

}}

sql:

select product

from products

where (price = 20 or productid = "xhdk-a-1293-#fj3")

and (price != 30)

dsl:

get /my_store/products/_search

}, }

],"must_not" : }}

}}

Elasticsearch 快取深入詳解

elasticsearch 查詢的響應需要占用 cpu 記憶體資源,在複雜業務場景,會出現慢查詢,需要花費大量的時間。如何破局呢?增加集群硬體配置會有高昂硬體開銷。還有沒有其他方案呢?這時候會想到 快取。elasticsearch 有哪些快取,不同快取的應用場景是什麼呢?本文給出答案。以上問題都是實...

3 Elasticsearch深入搜尋 部分匹配

elasticsearch認證複習準備 部分匹配概念 指定查詢詞的一部分並找出所有包含這部分片段的詞。簡單來說就是我輸入elas直接能給我匹配到elasticsearch這個詞。使用場景 匹配郵編 產品序列號或其他 not analyzed 未分析值,這些值可以是以某個特定字首開始,也可以是與某種模...

3 Elasticsearch深入搜尋 多欄位搜尋

elasticsearch認證複習準備 多欄位搜尋概念 用相同或不同的字串查詢乙個或多個字段 多字串查詢 get search 注 兩條語句同時匹配的文件比只與一條語句匹配的文件得分要高 get search 注 should中前兩個語句權重佔到了4 5 最佳字段搜尋 get search 注 將任...