<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### 類型和映射 _類型_ 在 Elasticsearch 中表示一組相似的文檔。_類型_ 由一個 _名稱_(比如 `user` 或 `blogpost`)和一個類似數據庫表結構的映射組成,描述了文檔中可能包含的每個字段的 _屬性_,數據類型(比如 `string`, `integer` 或 `date`),和是否這些字段需要被 Lucene 索引或儲存。 在【文檔】一章中,我們說過類型類似關系型數據庫中的表格,一開始你可以這樣做類比,但是現在值得更深入闡釋一下什么是類型,且在 Lucene 中是怎么實現的。 ### Lucene 如何處理文檔 Lucene 中,一個文檔由一組簡單的鍵值對組成,一個字段至少需要有一個值,但是任何字段都可以有多個值。類似的,一個單獨的字符串可能在分析過程中被轉換成多個值。Lucene 不關心這些值是字符串,數字或日期,所有的值都被當成 _不透明字節_ 當我們在 Lucene 中索引一個文檔時,每個字段的值都被加到相關字段的倒排索引中。你也可以選擇將原始數據 _儲存_ 起來以備今后取回。 ### 類型是怎么實現的 Elasticsearch 類型是在這個簡單基礎上實現的。一個索引可能包含多個類型,每個類型有各自的映射和文檔,保存在同一個索引中。 因為 Lucene 沒有文檔類型的概念,每個文檔的類型名被儲存在一個叫 `_type` 的元數據字段上。當我們搜索一種特殊類型的文檔時,Elasticsearch 簡單的通過 `_type` 字段來過濾出這些文檔。 Lucene 同樣沒有映射的概念。映射是 Elasticsearch 將復雜 JSON 文檔_映射_成 Lucene 需要的扁平化數據的方式。 例如,`user` 類型中 `name` 字段的映射聲明這個字段是一個 `string` 類型,在被加入倒排索引之前,它的數據需要通過 `whitespace` 分析器來分析。 ``` "name": { "type": "string", "analyzer": "whitespace" } ``` ### 預防類型陷阱 事實上不同類型的文檔可以被加到同一個索引里帶來了一些預想不到的困難。 想象一下我們的索引中有兩種類型:`blog_en` 表示英語版的博客,`blog_es` 表示西班牙語版的博客。兩種類型都有 `title` 字段,但是其中一種類型使用 `english` 分析器,另一種使用 `spanish` 分析器。 使用下面的查詢就會遇到問題: ``` GET /_search { "query": { "match": { "title": "The quick brown fox" } } } ``` 我們在兩種類型中搜索 `title` 字段,首先需要分析查詢語句,但是應該使用哪種分析器呢,`spanish` 還是 `english`?Elasticsearch 會采用第一個被找到的 `title` 字段使用的分析器,這對于這個字段的文檔來說是正確的,但對另一個來說卻是錯誤的。 我們可以通過給字段取不同的名字來避免這種錯誤 —— 比如,用 `title_en` 和 `title_es`。或者在查詢中明確包含各自的類型名。 ``` GET /_search { "query": { "multi_match": { <1> "query": "The quick brown fox", "fields": [ "blog_en.title", "blog_es.title" ] } } } ``` <1> `multi_match` 查詢在多個字段上執行 `match` 查詢并一起返回結果。 新的查詢中 `english` 分析器用于 `blog_en.title` 字段,`spanish` 分析器用于 `blog_es.title` 字段,然后通過綜合得分組合兩種字段的結果。 這種辦法對具有相同數據類型的字段有幫助,但是想象一下如果你將下面兩個文檔加入同一個索引,會發生什么: * 類型: user ``` { "login": "john_smith" } ``` * 類型: event ``` { "login": "2014-06-01" } ``` Lucene 不在乎一個字段是字符串而另一個字段是日期,它會一視同仁的索引這兩個字段。 然而,假如我們試圖 _排序_ `event.login` 字段,Elasticsearch 需要將 `login` 字段的值加載到內存中。像我們在 【字段數據介紹】中提到的,它將 _任意文檔_ 的值加入索引而不管它們的類型。 它會嘗試加載這些值為字符串或日期,取決于它遇到的第一個 `login` 字段。這可能會導致預想不到的結果或者以失敗告終。 提示:為了保證你不會遇到這些沖突,建議在同一個索引的每一個類型中,確保用_同樣的方式_映射_同名_的字段
                  <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>

                              哎呀哎呀视频在线观看