<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 復合核心字段類型 除了之前提到的簡單的標量類型,JSON還有`null`值,數組和對象,所有這些Elasticsearch都支持: ### 多值字段 我們想讓`tag`字段包含多個字段,這非常有可能發生。我們可以索引一個標簽數組來代替單一字符串: ```javascript { "tag": [ "search", "nosql" ]} ``` 對于數組不需要特殊的映射。任何一個字段可以包含零個、一個或多個值,同樣對于全文字段將被分析并產生多個詞。 言外之意,這意味著**數組中所有值必須為同一類型**。你不能把日期和字符竄混合。如果你創建一個新字段,這個字段索引了一個數組,Elasticsearch將使用第一個值的類型來確定這個新字段的類型。 > 當你從Elasticsearch中取回一個文檔,任何一個數組的順序和你索引它們的順序一致。你取回的`_source`字段的順序同樣與索引它們的順序相同。 > 然而,數組是做為多值字段被**索引**的,它們沒有順序。在搜索階段你不能指定“第一個值”或者“最后一個值”。倒不如把數組當作一個**值集合(bag of values)** ### 空字段 當然數組可以是空的。這等價于有零個值。事實上,Lucene沒法存放`null`值,所以一個`null`值的字段被認為是空字段。 這四個字段將被識別為空字段而不被索引: ```javascript "empty_string": "", "null_value": null, "empty_array": [], "array_with_null_value": [ null ] ``` ### 多層對象 我們需要討論的最后一個自然JSON數據類型是**對象(object)**——在其它語言中叫做hash、hashmap、dictionary 或者 associative array. **內部對象(inner objects)**經常用于在另一個對象中嵌入一個實體或對象。例如,做為在`tweet`文檔中`user_name`和`user_id`的替代,我們可以這樣寫: ```javascript { "tweet": "Elasticsearch is very flexible", "user": { "id": "@johnsmith", "gender": "male", "age": 26, "name": { "full": "John Smith", "first": "John", "last": "Smith" } } } ``` ### 內部對象的映射 Elasticsearch 會動態的檢測新對象的字段,并且映射它們為 `object` 類型,將每個字段加到 `properties` 字段下 ```json { "gb": { "tweet": { <1> "properties": { "tweet": { "type": "string" }, "user": { <2> "type": "object", "properties": { "id": { "type": "string" }, "gender": { "type": "string" }, "age": { "type": "long" }, "name": { <3> "type": "object", "properties": { "full": { "type": "string" }, "first": { "type": "string" }, "last": { "type": "string" } } } } } } } } } ``` <1> 根對象. <2><3> 內部對象. 對`user`和`name`字段的映射與`tweet`類型自己很相似。事實上,`type`映射只是`object`映射的一種特殊類型,我們將 `object` 稱為_根對象_。它與其他對象一模一樣,除非它有一些特殊的頂層字段,比如 `_source`, `_all` 等等。 ### 內部對象是怎樣被索引的 Lucene 并不了解內部對象。 一個 Lucene 文件包含一個鍵-值對應的扁平表單。 為了讓 Elasticsearch 可以有效的索引內部對象,將文件轉換為以下格式: ```javascript { "tweet": [elasticsearch, flexible, very], "user.id": [@johnsmith], "user.gender": [male], "user.age": [26], "user.name.full": [john, smith], "user.name.first": [john], "user.name.last": [smith] } ``` _內部欄位_可被歸類至name,例如`"first"`。 為了區別兩個擁有相同名字的欄位,我們可以使用完整_路徑_,例如`"user.name.first"` 或甚至`類型`名稱加上路徑:`"tweet.user.name.first"`。 > 注意: 在以上扁平化文件中,并沒有欄位叫作`user`也沒有欄位叫作`user.name`。 Lucene 只索引階層或簡單的值,而不會索引復雜的資料結構。 ## 對象-數組 ### 內部對象數組 最后,一個包含內部對象的數組如何索引。 我們有個數組如下所示: ```json { "followers": [ { "age": 35, "name": "Mary White"}, { "age": 26, "name": "Alex Jones"}, { "age": 19, "name": "Lisa Smith"} ] } ``` 此文件會如我們以上所說的被扁平化,但其結果會像如此: ```json { "followers.age": [19, 26, 35], "followers.name": [alex, jones, lisa, smith, mary, white] } ``` `{age: 35}`與`{name: Mary White}`之間的關聯會消失,因每個多值的欄位會變成一個值集合,而非有序的陣列。 這讓我們可以知道: * _是否有26歲的追隨者?_ 但我們無法取得準確的資料如: * _是否有26歲的追隨者**且名字叫Alex Jones?**_ 關聯內部對象可解決此類問題,我們稱之為_嵌套_對象,我們之後會在嵌套對象中提到它。
                  <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>

                              哎呀哎呀视频在线观看