<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 查詢語句查詢 原文鏈接 : [https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html)(修改該鏈接為官網對應的鏈接) 譯文鏈接 :[http://www.apache.wiki/pages/viewpage.action?pageId=4816898](http://www.apache.wiki/pages/viewpage.action?pageId=4882547)(修改該鏈接為 ApacheCN 對應的譯文鏈接) 貢獻者 : @羊兩頭 ## 查詢語句查詢 使用查詢解析器為了解析其內容的查詢。 這里是一個例子: ``` GET /_search { "query": { "query_string" : { "default_field" : "content", "query" : "this AND that OR thus" } } } ``` query_string以下幾個重要參數: | 參數 | 描述 | | `query` | 要解析的實際查詢。 請參閱查詢字符串語法。 | | `default_field` | 如果未指定前綴字段,則為查詢字詞的默認字段。 默認為index.query.default_field索引設置,默認為_all。 | | `default_operator` | 如果未指定顯式運算符,則使用默認運算符。 例如,使用OR的默認運算符,匈牙利的查詢資本將轉換為OR匈牙利的資本OR,如果使用默認運算符AND,則相同的查詢將轉換為AND匈牙利的資本AND。 默認值為OR。 | | `analyzer` | 用于分析查詢字符串的分析器名稱。 | | `allow_leading_wildcard` | 設置時,*或? 被允許作為第一個字符。 默認為true。 | | `lowercase_expanded_terms` | 通配符,前綴,模糊和范圍查詢的條件是否自動降低或不降低(因為它們沒有被分析)。 默認為true。 | | `enable_position_increments` | 設置為true可在結果查詢中啟用位置增量。 默認為true。 | | `fuzzy_max_expansions` | 控制模糊查詢將擴展到的術語數。 默認值為50 | | `fuzziness` | 設置模糊查詢的模糊性。 默認為AUTO。 有關允許的設置,請參閱“Fuzzinessedit”一節. | | `fuzzy_prefix_length` | 設置模糊查詢的前綴長度。 默認值為0。 | | `phrase_slop` | 設置短語的默認斜率。 如果為零,則需要精確的短語匹配。 默認值為0。 | | `boost` | 設置查詢的提升值。 默認為1.0。 | | `analyze_wildcard` | 默認情況下,不分析查詢字符串中的通配符術語。 將此值設置為true,將盡力分析這些值。 | | `auto_generate_phrase_queries` | 默認False | | `max_determinized_states` | 限制允許創建多少個自動機狀態regexp查詢。 這防止了太難的(例如指數級的)正則表達式。 默認為10000。 | | `minimum_should_match` | 一個值,用于控制在生成的布爾查詢中應該匹配多少個“應該”子句。 它可以是絕對值(2),百分比(30%)或兩者的組合。 | | `lenient` | 如果設置為true將導致基于格式的失敗(例如向數字字段提供文本)被忽略。 | | `locale` | 應用于字符串轉換的區域設置。 默認為ROOT。 | | `time_zone` | 要應用于與日期相關的任何范圍查詢的時區。 另請參閱JODA時區。 | 當生成多項查詢時,可以控制如何使用rewrite參數重寫它。 ### 默認字段: 當未在查詢字符串語法中顯式指定要搜索的字段時,將使用index.query.default_field來導出要搜索的字段。 它默認為_all字段。 因此,如果_all字段被禁用,可能有必要更改它以設置不同的默認字段。 ### 多個字段: query_string查詢也可以針對多個字段運行。 字段可以通過“fields”參數提供(如下例所示)。 對多個字段運行query_string查詢的想法是將每個查詢項擴展為OR子句,如下所示: ``` field1:query_term OR field2:query_term | ... ``` 例如,以下查詢: ``` GET /_search { "query": { "query_string" : { "fields" : ["content", "name"], "query" : "this AND that" } } } ``` 等價與: ``` GET /_search { "query": { "query_string": { "query": "(content:this OR name:this) AND (content:that OR name:that)" } } } ``` 由于從單個搜索項生成了幾個查詢,因此可以使用dis_max查詢或簡單的bool查詢自動完成組合。 例如(使用^ 5表示法將名稱提升5): ``` GET /_search { "query": { "query_string" : { "fields" : ["content", "name^5"], "query" : "this AND that OR thus", "use_dis_max" : true } } } ``` 簡單通配符也可以用于搜索文檔的“內部”特定內部元素。 例如,如果我們有一個城市對象與多個字段(或內部對象與字段)在其中,我們可以自動搜索所有“城市”字段: ``` GET /_search { "query": { "query_string" : { "fields" : ["city.*"], "query" : "this AND that OR thus", "use_dis_max" : true } } } ``` 另一個選項是在查詢字符串本身中提供通配符字段搜索(正確轉義*符號),例如:city。\ *:something。 對多個字段運行query_string查詢時,允許以下附加參數: | 參數 | 描述 | | --- | --- | | `use_dis_max` | 應該使用dis_max(設置為true)或bool查詢(設置為false)組合查詢。 默認為true。 | | `tie_breaker` | 當使用dis_max時,斷開最大斷路器。 默認值為0。 | fields參數還可以包括基于模式的字段名稱,允許自動擴展到相關字段(包括動態引入的字段)。 例如: ``` GET /_search { "query": { "query_string" : { "fields" : ["content", "name.*^5"], "query" : "this AND that OR thus", "use_dis_max" : true } } } ``` ## 查詢字符串語法 查詢字符串“迷你語言”由查詢字符串查詢和查詢API中的q查詢字符串參數使用。 查詢字符串被解析為一系列的術語和運算符。 術語可以是單個詞 -?quick?或brown?或一個短語,用雙引號括起來 - “quick brown” - 以相同的順序搜索短語中的所有單詞。 操作員允許您自定義搜索 - 可用選項如下所述。 ### 字段名稱 如查詢字符串查詢中所述,搜索default_field是為了搜索搜索詞,但可以在查詢語法中指定其他字段 如在status字段內包含active ``` status:active ``` 以下表示標題字段包含快速或棕色。 如果省略OR運算符,將使用默認運算符 ``` title:(quick OR brown) title:(quick brown) ``` 以下表示作者字段包含確切的短語“john smith” ``` author:"John Smith" ``` 表示包含任何字段book.title,book.content或book.date包含quick 或brown(注意我們如何需要用反斜杠轉義*) ``` book.\*:(quick brown) ``` 以下表示字段標題具有任何非空值 ``` _exists_:title ``` ### 通配符 通配符搜索可以使用單個術語運行? 替換單個字符,*替換零個或多個字符: ``` qu?ck bro* ``` 請注意,通配符查詢會使用大量的內存并且執行得效率非常慢 - 只需考慮需要查詢多少條件來匹配查詢字符串“a * b * c *” ``` 在字的開頭允許通配符(例如“* ing”)特別耗性能,因為索引中的所有項都需要檢查,以防它們匹配。 可以通過將allow_leading_wildcard設置為false來禁用主導通配符。 ``` 默認情況下不會分析通配字詞 - 它們是小寫的(lowercase_expanded_terms默認為true),但不進行進一步的分析,主要是因為無法準確分析缺少某些字母的單詞。但是,通過將analyze_wildcard設置為true,將嘗試在搜索術語列表以匹配術語之前分析通配字。 ### 正則表達式 正則表達式模式可以通過以正斜線(“/”)包裹在查詢字符串中來嵌入: ``` name:/joh?n(ath[oa]n)/ ``` 說明了正則表達式語法中受支持的正則表達式語法。 ``` allow_leading_wildcard參數對正則表達式沒有任何控制。 諸如以下的查詢字符串將強制Elasticsearch訪問索引中的每個術語: ``` ``` /.*n/ ``` 要謹慎使用。 ### 模糊性 我們可以使用“fuzzy”運算符搜索與我們的搜索字詞類似但不完全相似的字詞: ``` quikc~ brwn~ foks~ ``` 這使用Damerau-Levenshtein距離找到所有最多只有兩個變化的術語,其中一個變化是單個字符的插入,刪除或替換,或兩個相鄰字符的變換。 默認編輯距離為2,但編輯距離為1應足以捕獲所有人為拼寫錯誤的80%。 它可以指定為: ``` quikc~1 ``` ### 鄰近搜索 雖然短語查詢(例如“john smith”)期望所有的詞語具有完全相同的順序,但是鄰近查詢允許指定的詞語更遠或者以不同的順序。 以相同的方式,模糊查詢可以指定單詞中的字符的最大編輯距離,接近搜索允許我們指定短語中的單詞的最大編輯距離: ``` "fox quick"~5 ``` 字段中的文本越接近查詢字符串中指定的原始順序,文檔則被認為是相關。 與上述示例查詢相比,短語“quick fox”將被認為比“quick brown fox”更相關。 ### 范圍 可以為日期,數字或字符串字段指定范圍。 包含的范圍使用方括號[min TO max]和大括號{min TO max}的排除范圍指定。 2012年的每一天 ``` date:[2012-01-01 TO 2012-12-31] ``` 數字1到5 ``` count:[1 TO 5] ``` 標簽在alpha到omega之間但不包含alpha和omega ``` tag:{alpha TO omega} ``` 數字1到無群大 ``` count:[10 TO *] ``` 日期:2012你年以前 ``` date:{* TO 2012-01-01} ``` 大塊好和方括號可以組合使用 數字1到5但不包含5 ``` count:[1 TO 5} ``` 一側無界的范圍可以使用以下語法 ``` age:>10 age:>=10 age:<10 age:<=10 ``` ``` 要將上限和下限與簡化的語法組合,您需要使用AND運算符連接兩個子句: ``` ``` age:(>=10 AND <20) age:(+>=10 +<20) ``` 查詢字符串中范圍的解析可能很復雜并且容易出錯。 使用顯式范圍查詢是更可靠的。 ### 特殊字符 使用boost運算符^使一個術語比另一個更相關。 例如,如果我們想查找關于狐貍的所有文檔,但我們對快速狐貍特別感興趣: ``` quick^2 fox ``` 默認提升值為1,但可以是任何正浮點數。 在0和1之間升高降低相關性。 提升也可以應用于短語或組: ``` "john smith"^2 (foo bar)^4 ``` ### 布爾運算符 默認情況下,所有字詞都是可選的,只要一個字詞匹配。 搜索foo bar baz會找到包含foo或bar或baz中的一個或多個的任何文檔。 我們已經討論了上面的default_operator,它允許你強制所有的術語是必需的,但也有布爾運算符,可以在查詢字符串本身使用,以提供更多的控制。 首選運算符是+(此項必須存在)和 - (此項不能存在)。 所有其他條款是可選的。 例如,此查詢: ``` quick brown +fox -news ``` 說明: * fox必須存在 * news不存在 * quick 和brown是可選的 - 它們的存在增加相關性 還支持熟悉的操作符AND,OR和NOT(也寫為&&,||和!)。 然而,這些操作符的效果可能比第一眼明顯的復雜。 NOT優先于AND,優先于OR。 而+和 - 只影響運算符右邊的項,AND和OR可以影響左邊和右邊的項。 ``` 使用AND,OR和NOT重寫上述查詢表明復雜性: quick OR brown AND fox AND NOT news 這是不正確的,因為brown現在是必需的術語。 (quick OR brown) AND fox AND NOT news 這是不正確的,因為現在需要快速或棕色中的至少一個,并且對這些術語的搜索將與原始查詢不同地打分。 ((quick AND fox) OR (brown AND fox) OR fox) AND NOT news 此表單現在正確復制原始查詢的邏輯,但相關性評分與原始查詢具有很少相似性。 相反,使用匹配查詢重寫的同一查詢將如下所示: { "bool": { "must": { "match": "fox" }, "should": { "match": "quick brown" }, "must_not": { "match": "news" } } } ``` ### 分組 多個術語或子句可以與括號組合在一起,形成子查詢: ``` (quick OR brown) AND fox ``` 組可用于定位特定字段,或用于提高子查詢的結果: ``` status:(active OR pending) title:(full text search)^2 ``` ### 保留字符 如果您需要在查詢中使用作為運算符的任何字符(而不是運算符),則應使用前用反斜杠轉義它們。 例如,要搜索(1 + 1)= 2,您需要將查詢寫為\(1 \ +1 \)\ = 2。 保留字符為:+ - = && || &gt; &lt;! (){} [] ^“?*?:\ / 無法正確轉義這些特殊字符可能會導致語法錯誤,阻止您的查詢運行。 ``` 請看這里: 空格也可以是保留字符。 例如,如果你有一個同義詞列表將“wi fi”轉換為“wifi”,query_string搜索“wi fi”將失敗。 查詢字符串解析器會將您的查詢解釋為搜索“wi OR fi”,而存儲在索引中的條件實際上是“wifi”。 轉義空格將保護它不被查詢字符串解析器,如:“wi \ fi”。 ``` ### 空查詢 如果查詢字符串為空或僅包含空格,則查詢將生成空結果集。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看