前篇文章中(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
過濾器:
因為term
和bool
過濾器是兄弟關係,他們都處於外層的布林邏輯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 再比如 等。下面對其...