一、基礎查詢語句的結構:
二、query子句詳解:講這個query語句要是對分詞器的概念還不理解可以看一下下面這個文章,了解一下其es的一些基本概念:初識ES(ES的基本概念、倒排索引、索引和文檔的CRUD)
所將要查詢的文檔: 假設其中bookName的值被分詞為:“My”、“name”、“is”、“CSDN”
1 、match查詢:match是一種會將你搜索的query進行分詞的查詢方法。而不是直接拿你的查詢語句原封不動的去與被分詞過后詞進行匹配。 根據(jù)bookName字段進行查詢:
這個查詢會先講查詢語句中的“This is CSDN”進行分詞,得到“This”、“is”、“CSDN”會分別拿這三個詞去匹配,就會發(fā)現(xiàn)“is”和“CSDN”都能匹配成功只要一個匹配成功則就可以。所以可以查詢到。 2、match_phrase查詢:這個查詢和普通的match查詢相比限制性更強,他依舊會對query內的值進行分詞,但他并不是匹配到一處分詞就匹配成功,而是對所有的詞都能匹配才算成功。而且每個詞都相對位置還得正確,默認情況下詞與詞之間在被搜索原文中是連續(xù)的。像前面咱舉的那個例子就匹配不成功,This沒有匹配到,要是講“This”換為name就可以,但如果換為My也不成功,雖然My匹配成功但和“is”并不連續(xù)。 咱看match_phrase是不是太嚴格了,所以我們有一個參數(shù)“slop”,這個參數(shù)可以用于控制詞與詞之間不一定要連續(xù),可以隔幾個詞。具體幾個看slop的值。
這個就可以匹配成功,雖然“My”和“is”之間還隔了一個“name”,但slop參數(shù)為1,說明詞與詞之間可以間隔一個詞,不一定連續(xù)。 可以看到此時bookName的格式又深了一層,因為我們需要添加slop參數(shù)。 3、multi_match查詢:這個查詢也會進行分詞,就是對多個字段進行match操作,只要一個字段匹配上了就行。其中bookName匹配不上,但author字段能匹配上。則能查詢到。也就是對bookName和author字段分別進行了一次的match操作。
4、Term查詢:與match查詢相對應的是Term查詢,他不會對query內的值進行分詞,直接拿整個短語進行匹配。非常適用于精確匹配的需求,例如查找特定ID、郵箱地址、狀態(tài)代碼等。它不執(zhí)行任何文本分析或模糊匹配,只關注精確匹配。
這個”bookName“雖然和es中所存儲的一模一樣,但是查詢不到,因為此時再es中用于查詢的是一個個的短語,而term是直接拿整個短語去匹配的,那當然是查詢不到的。 5、Terms查詢:Terms查詢就是獲取多個term查詢結果的并集。 下面這個就是當bookName中的“My”還有“CSDN”匹配成功但”apple“匹配不成功,但因為是并集,所以只要有一個符合即可。所以能夠查詢到。
6、Prefix查詢(前綴查詢):在特定字段上查找以指定前綴開頭的文檔。它不會對查詢字符串進行分詞,而是直接在字段上進行精確匹配。 適用于需要對特定前綴進行精確匹配的場景。例如,在搜索用戶輸入時,可以快速過濾出以特定字母開頭的單詞或短語;在數(shù)據(jù)庫中查找以特定前綴開頭的文檔;在日志文件中查找以特定標識符開頭的行等。
這個能匹配到This,所以能查詢到 。 7、fuzzy和wildcard查詢(模糊查詢):這兩個查詢方式都不會對查詢條件的值進行分詞。兩者進行的都是模糊查詢。 fuzzy查詢例子:其中我誤將name打成nane,但由于我參數(shù)fuzziness值為1,說明我可以改動一個字符(添加、刪除、修改都可)。將nane可以變成name。所以匹配成功。fuzziness默認值為2.
wildcard查詢例子:這個查詢語句我們就可以查詢到name,其中將?替換成任何字符,只要能匹配上的都可。如果為*號則是只要以na為首以e為結尾的都可。
8、range查詢(范圍查詢):range查詢就是對某一字段的數(shù)值進行范圍查詢。
下面這個查詢條件剛好能查詢到,因為120處于 (100,120]范圍之內。
9、bool查詢這個查詢顧名思義就是將多個查詢條件結合起來,根據(jù)邏輯詞來判斷是否成立:
注意這里面有must和should兩個查詢集合,這兩個查詢集合要取并集,才能被查詢到。也就是說must里面條件要全滿足且should里面條件至少滿足一項才可以。按照下面這個條件來查詢是類查詢到的。
三、sort子句和分頁詳解這是排序條件部分,用于指定檢索結果的排序方式。你可以根據(jù)一個或多個字段進行排序,并指定排序的方向(升序或降序)。 途中根據(jù)query查詢出來的文檔根據(jù)number降序排序。且進行分頁,取1-10條數(shù)據(jù)。
|
|