ElasticSearch 組合過濾器

2022-06-11 16:42:08 字數 2078 閱讀 2512

前篇文章中(term精確查詢)的兩個例子都是單個過濾器(filter)的使用方式。

在實際應用中,我們很有可能會過濾多個值或字段。比方說,怎樣用 elasticsearch 來表達下面的 sql ?

這種情況下,我們需要bool(布林)過濾器。

這是個 復合過濾器(compound filter) ,它可以接受多個其他過濾器作為引數,並將這些過濾器結合成各式各樣的布林(邏輯)組合。

乙個bool過濾器由三部分組成:

所有的語句都 必須(must) 匹配,與and等價。

must_not

所有的語句都 不能(must not) 匹配,與not等價。

should

至少有乙個語句要匹配,與or等價。

只須將它們置入bool過濾器的不同部分即可,乙個bool過濾器的每個部分都是可選的(例如,我們可以只有乙個must語句),而且每個部分內部可以只有乙個或一組過濾器。

用 elasticsearch 來表示本部分開始處的 sql 例子,將兩個term過濾器置入bool過濾器的should語句內,再增加乙個語句處理not非的條件:

should語句塊裡面的兩個term過濾器與bool過濾器是父子關係,兩個term條件需要匹配其一。

如果乙個產品的**是30,那麼它會自動被排除,因為它處於must_not語句裡面。

結果返回了 2 個命中結果,兩個文件分別匹配了bool過濾器其中的乙個條件

儘管bool是乙個復合的過濾器,可以接受多個子過濾器,需要注意的是bool過濾器本身仍然還只是乙個過濾器。

這意味著我們可以將乙個bool過濾器置於其他bool過濾器內部,

這為我們提供了對任意複雜布林邏輯進行處理的能力。

對於以下這個 sql 語句:

我們將其轉換成一組巢狀的bool過濾器:

因為termbool過濾器是兄弟關係,他們都處於外層的布林邏輯should的內部,返回的命中文件至少須匹配其中乙個過濾器的條件。

這兩個term語句作為兄弟關係,同時處於must語句之中,所以返回的命中文件要必須都能同時匹配這兩個條件。

elasticsearch配置詳解

elasticsearch的config資料夾裡面有兩個配置檔案 elasticsearch.yml和logging.yml,第乙個是es的基本配置檔案,第二個是日誌配置檔案,es也是使用log4j來記錄日誌的,所以logging.yml裡的設定按普通log4j配置檔案來設定就行了。下面主要講解下e...

誰在使用Elasticsearch

github github使用elasticsearch搜尋20tb的資料,包括13億的檔案和1300億行的 這個不用介紹了吧,碼農們都懂的,github在2013年1月公升級了他們的 搜尋,由solr轉為elasticsearch,目前集群規模為26個索引儲存節點和8個客戶端節點 負責處理搜尋請求...

elasticsearch配置說明

elasticsearch.yml是elasticsearch主要的配置檔案,所有的配置都在這個檔案裡完成,一般情況下,預設的配置已經可以比較好地執行乙個集群了,但你也可以對其進行微調。在環境變數中的引數可以用來作為配置引數的值,比如配置檔案裡舉的乙個例子為 node.rack 再比如 等。下面對其...