ElasticSearch系列二 DSL查詢

2021-10-05 00:19:08 字數 3178 閱讀 3736

復合查詢

查詢的優化

葉查詢子句:在特定的字段上查詢特定的值,比如 match term rang 可以理解為單條件查詢

復合查詢字句:包含其他葉查詢或復合查詢,可以理解為多條件查詢.

查詢: query 用於檢索內容與條件是否匹配,並計算_score份數

過濾:filter不計算匹配得分,只是簡單的決定文件是否匹配,主要用於過濾結構化資料 如時間 狀態 型別等字段

我們索引資料的結構

get /meadin/industry_news/_search

}, }],

"filter":}

}}}}

相當於sql語句

select * from industry_news where title like %酒店% and content like %洲際% and newsissuetime between '' and ''

查詢預設是分詞的 } 和 }第二個條件比第乙個條件查詢到的結果只會多不會少,} 可以理解為

} } } 三個條件查到 的結果的總和

lucece倒排索引

根據關鍵字找到所在的索引的id 酒店 ->1 酒店這裡是被分詞的->1,2,4

match的模糊查詢

get /meadin/industry_news/_search}}

}

fuzziness引數的表示最大的編輯距離 預設是2

ac abc 編輯差乙個字元

ad abcd 編輯差2個字元

編輯距離越小則兩個字串越像 我們使用fuzziness 一般都是設定為1

fuzzy 的模糊查詢

get /meadin/industry_news/_search

}}

fuzzy 的模糊查詢和term查詢有點像 也是不分詞的查詢 fuzzy雖然不分詞可以模糊匹配

環球訊 -> 「source」: 「環球旅訊」 可以匹配到這個, 但是如果是term查詢就匹配不到了

match短語查詢 match_parse

get /meadin/industry_news/_search

}}

match 字首查詢

匹配以專家開頭的標題的文章

get /meadin/industry_news/_search

}}

macth多欄位查詢

get /meadin/industry_news/_search

}}

在title synopisi contect 三個欄位中查詢 任意乙個滿足條件都會返回,title^3 計算份數的時候title欄位的重要性是其他欄位的三倍,多匹配查詢內部的執行方式 根據 type 型別

預設就是best_fields:查詢匹配任何欄位的文章,但是使用最佳匹配欄位的score

most_fields:查詢匹配任何欄位的文件,接合每個欄位的score

cross_fields:用相同的分析器處理字段,把這些字段當做乙個大的字段.

phrase:每個欄位上執行短語匹配查詢,接合每個欄位的score

phrase_prefix:在每個欄位是上執行短語字首查詢,結合每個欄位的score

精準的查詢,對查詢結果不做相關性排序.常用語結構化資料 如 數字 日期 列舉

單個字段查詢

select * from table where type=1

get /meadin/industry_news/_search

}}

多欄位查詢

select * from table where type in (19,20,79)

get /meadin/industry_news/_search

}}

範圍查詢

get /meadin/industry_news/_search}}

}

復合查詢就是將多個葉子查詢組合到一起,組合方式有多種

must 必須出現在匹配的文件中 並且會影響匹配得分

filter 必須出現在匹配的文當中 不影響匹配得分

should 應該出現在匹配的文件中 匹配乙個或多個should裡面的條件(可以通過minimum_should_match引數設定 預設最少匹配乙個)

must_not 必須不出現在匹配的文件中

get /meadin/industry_news/_search

}, "boost"

: 1.2

}},

}, "boost"

: 1.2

}}]}}

}

查詢context欄位包含洗浴 或者 電視 的文件 constant_score 表示不計算詞頻 同乙個詞出現一次和出現多次得分是一樣的,這樣的查詢場景 我們關心的是包含的要查詢的內容多不多.好比 查詢一家酒店 要求這個酒店 有 洗浴 電視 wifi 等 出現的專案越多排名越靠前

get meadin/industry_news/_search

}, "filter":}}}}

為每乙個倒排索引構建乙個 bitset(用來做快取的二進位制陣列) 如下圖

根據查詢條件 「status」: 「1」 找到對應的 bitset [1,0,1] 通過bitset找到對應的資料doc1 和 doc3把資料返回給客戶端

cache bitset 跟蹤query 在最近的256個query中超過一定次數使用的bitset會被快取起來,以備下次使用

bitset的查詢是在query查詢開始的時候 進行的,這樣可以過濾掉大部分內容

以後只要有相同的filter 就會直接定位到相應的bitset

elasticsearch啟動報錯系列

wget 解壓tar zxvf elasticsearch 6.2.4.tar.gz 在啟動過程 中會遇到這兩個問題 1 max file descriptors 4096 for elasticsearch process is too low,increase to at least 65536...

Elasticsearch系列九 Bool 查詢

案例書籍推薦 bool查詢對應lucenne中的booleanquery,它由乙個或者多個子句組成,match 分詞匹配,下面的例子會對查詢盡心分詞,分為 寶馬 多少 馬力 那麼所有包含這三個詞中的乙個或者多個文件就會被搜尋出來.match phrase 針對上面的例子,乙個文件 我的保時捷也不錯 ...

ElasticSearch系列04 核心概念

一 es配置檔案詳解 elasticsearch.yml es的基本配置檔案 詳見elasticsearch中文.yml logging.yml 日誌配置檔案,es也是使用log4j來記錄日誌的,所以logging.yml裡的設定按普通log4j配置來設定就行了。二 es中的核心概念 cluster...