乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      ES:基礎查詢語法(簡單易懂)

       塞北de雪 2025-06-04 發(fā)布于江蘇

      一、基礎查詢語句的結構:

      GET http://ip:prot/textbook/_search

      GET       

      {          "query" : { ...query子句... },

                 "aggs" : { ..aggs子句.. },

                 "sort" : { ..sort子句.. }

                 "from" : 0, // 返回搜索結果的開始位置

                 "size" : 10, // 分頁大小,一次返回多少數(shù)據(jù)

                 "_source" :[ ...需要返回的字段數(shù)組... ],

         }

      • query子句:類似于mysql中的where語句,用于定義搜索條件,如等值查詢、模糊查詢、范圍查詢等(重點)
      • aggs字句:用于對搜索結果進行各種統(tǒng)計和分組。類似于mysql中的group by。例如可以計算某一字段不同值各自出現(xiàn)的次數(shù),或者根據(jù)某個字段的值進行分組。
      • sort子句:這個就非常顯而易見了,是對查詢出來的結果進行根據(jù)某一規(guī)則進行排序。
      • from和size:這兩個是配合使用的,是用來分頁的。from定義的是展示的第一條數(shù)據(jù)的處于結果集的位置(也就是下標),size表示此次展示多大的結果集。這個兩個也就相當于mysql中的limit和offset語句
      • "_source":通過這個列表控制返回數(shù)據(jù)中應該包含哪些字段,就相當于mysql中SELECT name ,age FROM People這個語句中的name,age。表示返回結果只包含這兩個我們所需字段即可。

      二、query子句詳解:

      講這個query語句要是對分詞器的概念還不理解可以看一下下面這個文章,了解一下其es的一些基本概念:初識ES(ES的基本概念、倒排索引、索引和文檔的CRUD)

              在es中我們要知道,我們所查詢的內容,是被分詞器進行了分詞并將其保存下來,我們查詢是通過匹配這個詞進行查詢的。

      所將要查詢的文檔:

      假設其中bookName的值被分詞為:“My”、“name”、“is”、“CSDN”

      1. {
      2. "_index": "my_index",
      3. "_id": "12Sad33fdAdfFWW",
      4. "_source": {
      5. "bookName": "My name is CSDN",
      6. "author": "起床",
      7. "number": 120
      8. }
      9. }

      1 、match查詢:

      match是一種會將你搜索的query進行分詞的查詢方法。而不是直接拿你的查詢語句原封不動的去與被分詞過后詞進行匹配。

      根據(jù)bookName字段進行查詢:

      1. GET http://ip:prot/my_index/_search
      2. {
      3. "query": {
      4. "match": {
      5. "bookName":"This is CSDN"
      6. }
      7. }
      8. }

      這個查詢會先講查詢語句中的“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的值。

      1. GET http://ip:prot/my_index/_search
      2. {
      3. "query": {
      4. "match_phrase": {
      5. "bookName":{
      6. "query":"My is CSDN",
      7. "slop":1
      8. }
      9. }
      10. }
      11. }

      這個就可以匹配成功,雖然“My”和“is”之間還隔了一個“name”,但slop參數(shù)為1,說明詞與詞之間可以間隔一個詞,不一定連續(xù)。

      可以看到此時bookName的格式又深了一層,因為我們需要添加slop參數(shù)。

      3、multi_match查詢:

      這個查詢也會進行分詞,就是對多個字段進行match操作,只要一個字段匹配上了就行。其中bookName匹配不上,但author字段能匹配上。則能查詢到。也就是對bookName和author字段分別進行了一次的match操作。

      1. GET http://ip:prot/textbook/_search
      2. {
      3. "query": {
      4. "multi_match": {
      5. "query" : "起床",
      6. "fields" : ["bookName", "author"]
      7. }
      8. }
      9. }

      4、Term查詢:

      與match查詢相對應的是Term查詢,他不會對query內的值進行分詞,直接拿整個短語進行匹配。非常適用于精確匹配的需求,例如查找特定ID、郵箱地址、狀態(tài)代碼等。它不執(zhí)行任何文本分析或模糊匹配,只關注精確匹配。

      1. GET http://ip:prot/textbook/_search
      2. {
      3. "query": {
      4. "term": {
      5. "bookName": "My name is CSDN"
      6. }
      7. }
      8. }

      這個”bookName“雖然和es中所存儲的一模一樣,但是查詢不到,因為此時再es中用于查詢的是一個個的短語,而term是直接拿整個短語去匹配的,那當然是查詢不到的。

      5、Terms查詢:

      Terms查詢就是獲取多個term查詢結果的并集。

      下面這個就是當bookName中的“My”還有“CSDN”匹配成功但”apple“匹配不成功,但因為是并集,所以只要有一個符合即可。所以能夠查詢到。

      1. GET http://ip:prot/my_index/_search
      2. {
      3. "query": {
      4. "terms": {
      5. "bookName": ["My", "CSDN", "apple"]
      6. }
      7. }
      8. }

      6、Prefix查詢(前綴查詢):

              在特定字段上查找以指定前綴開頭的文檔。它不會對查詢字符串進行分詞,而是直接在字段上進行精確匹配。

              適用于需要對特定前綴進行精確匹配的場景。例如,在搜索用戶輸入時,可以快速過濾出以特定字母開頭的單詞或短語;在數(shù)據(jù)庫中查找以特定前綴開頭的文檔;在日志文件中查找以特定標識符開頭的行等。

      1. GET http://ip:prot/my_index/_search
      2. {
      3. "query": {
      4. "prefix": {
      5. "bookName": {
      6. "value" : "Thi"
      7. }
      8. }
      9. }
      10. }

      這個能匹配到This,所以能查詢到 。

      7、fuzzy和wildcard查詢(模糊查詢):

              這兩個查詢方式都不會對查詢條件的值進行分詞。兩者進行的都是模糊查詢。

      fuzzy查詢例子:其中我誤將name打成nane,但由于我參數(shù)fuzziness值為1,說明我可以改動一個字符(添加、刪除、修改都可)。將nane可以變成name。所以匹配成功。fuzziness默認值為2.

      1. GET http://ip:prot/textbook/_search
      2. {
      3. "query": {
      4. "fuzzy": {
      5. "bookName":{
      6. "value":"nane",
      7. "fuzziness":1
      8. }
      9. }
      10. }
      11. }

       wildcard查詢例子:這個查詢語句我們就可以查詢到name,其中將?替換成任何字符,只要能匹配上的都可。如果為*號則是只要以na為首以e為結尾的都可。

      1. GET http://ip:prot/textbook/_search
      2. {
      3. "query": {
      4. "wildcard": {
      5. "bookName":{
      6. "value":"na?e"
      7. }
      8. }
      9. }
      10. }
      • 使用場景差異:Fuzzy查詢適用于需要精確匹配但可能存在拼寫錯誤的場景。它通過計算編輯距離來確定查詢詞與文檔之間的相似度,從而找到可能的匹配。而Wildcard查詢則適用于需要更靈活的模糊匹配的場景,如根據(jù)部分字符串或模式進行匹配。
      • 匹配方式差異:Fuzzy查詢基于編輯距離(Levenshtein距離)計算查詢詞與文檔之間的相似度。它通過計算一個詞項與文檔之間的最小編輯操作次數(shù)來找到與查詢詞相似的文檔。而Wildcard查詢則使用通配符模式進行匹配,通過指定星號(*)和問號(?),可以匹配任意字符或單個字符。
      • 性能差異:Fuzzy查詢在處理大規(guī)模數(shù)據(jù)時可能會變得低效,因為它需要對每個文檔進行逐一比較。而Wildcard查詢則更加適用于大規(guī)模數(shù)據(jù)的模糊匹配,因為它使用通配符模式進行匹配,可以減少需要檢查的文檔數(shù)量。

      8、range查詢(范圍查詢):

      range查詢就是對某一字段的數(shù)值進行范圍查詢。

      • gte:大于等于
      • gt:大于
      • lte:小于等于
      • lt:小于

      下面這個查詢條件剛好能查詢到,因為120處于 (100,120]范圍之內。

      1. GET http://ip:prot/my_index/_search
      2. {
      3. "query": {
      4. "range": {
      5. "number": {
      6. "gt":100,
      7. "lte":120
      8. }
      9. }
      10. }
      11. }

      9、bool查詢

      這個查詢顧名思義就是將多個查詢條件結合起來,根據(jù)邏輯詞來判斷是否成立:

      • must:相當于且
      • should:相當于或
      • must_not:相當于非

      注意這里面有must和should兩個查詢集合,這兩個查詢集合要取并集,才能被查詢到。也就是說must里面條件要全滿足且should里面條件至少滿足一項才可以。按照下面這個條件來查詢是類查詢到的。

      1. GET http://ip:prot/my_index/_search
      2. {
      3. "query":{
      4. "bool":{
      5. "must":{
      6. "match":{
      7. "bookName":"My name is apple"
      8. }
      9. },
      10. "should":{
      11. "term":{
      12. "author":"apple"
      13. },
      14. "range":{
      15. "num":{
      16. "lte":120
      17. }
      18. },
      19. }
      20. }
      21. }
      22. }

      三、sort子句和分頁詳解

              這是排序條件部分,用于指定檢索結果的排序方式。你可以根據(jù)一個或多個字段進行排序,并指定排序的方向(升序或降序)。

      途中根據(jù)query查詢出來的文檔根據(jù)number降序排序。且進行分頁,取1-10條數(shù)據(jù)。

      1. GET http://ip:prot/my_index/_search
      2. {
      3. "query": {
      4. "range": {
      5. "number": {
      6. "gt":100,
      7. "lte":120
      8. }
      9. }
      10. },
      11. "sort": {
      12. "number": {
      13. "order": "desc"
      14. }
      15. },
      16. "from":0,
      17. "size":10,
      18. }

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多