<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                冗余數據方式的來建模,其實用的就是object類型,我們這里又要引入一種新的object類型,nested object類型個人感覺就像結構化數據粘合一樣,屬性之間關聯,實體之間隔離 ## 1. object與nested object 1. 首先插入一條數據 ~~~ PUT /website/blogs/6 { "title": "花無缺發表的一篇帖子", "content": "我是花無缺,大家要不要考慮一下投資房產和買股票的事情啊。。。", "tags": [ "投資", "理財" ], "comments": [ { "name": "小魚兒", "comment": "什么股票啊?推薦一下唄", "age": 28, "stars": 4, "date": "2016-09-01" }, { "name": "黃藥師", "comment": "我喜歡投資房產,風,險大收益也大", "age": 31, "stars": 5, "date": "2016-10-22" } ] } ~~~ 查詢被年齡是28歲的黃藥師評論過的博客,搜索 ~~~ GET /website/blogs/_search { "query": { "bool": { "must": [ { "match": { "comments.name": "黃藥師" }}, { "match": { "comments.age": 28 }} ] } } } ~~~ 得到 ~~~ "_index": "website", "_type": "blogs", "_id": "6", "_score": 1.8022683, "_source": { "title": "花無缺發表的一篇帖子", "content": "我是花無缺,大家要不要考慮一下投資房產和買股票的事情啊。。。", "tags": [ "投資", "理財" ], "comments": [ { "name": "小魚兒", "comment": "什么股票啊?推薦一下唄", "age": 28, "stars": 4, "date": "2016-09-01" }, { "name": "黃藥師", "comment": "我喜歡投資房產,風,險大收益也大", "age": 31, "stars": 5, "date": "2016-10-22" } ] } } ] } ~~~ 黃藥師的年齡是31,但是用28就搜出來了,這顯然是不行的,為什么會這樣呢? object類型數據結構的底層存儲,文檔都被扁平化了 object類型底層數據結構,會將一個json數組中的數據,進行扁平化 ~~~ { "title": [ "花無缺", "發表", "一篇", "帖子" ], "content": [ "我", "是", "花無缺", "大家", "要不要", "考慮", "一下", "投資", "房產", "買", "股票", "事情" ], "tags": [ "投資", "理財" ], "comments.name": [ "小魚兒", "黃藥師" ], "comments.comment": [ "什么", "股票", "推薦", "我", "喜歡", "投資", "房產", "風險", "收益", "大" ], "comments.age": [ 28, 31 ], "comments.stars": [ 4, 5 ], "comments.date": [ 2016-09-01, 2016-10-22 ] } ~~~ 所以我們age=28,也能搜索到 2. 引入nested object類型,來解決object類型底層數據結構導致的問題 * 刪除index,修改映射,把comments改成nested類型 ~~~ PUT /website { "mappings": { "blogs": { "properties": { "comments": { "type": "nested", "properties": { "name": { "type": "string" }, "comment": { "type": "string" }, "age": { "type": "short" }, "stars": { "type": "short" }, "date": { "type": "date" } } } } } } } ~~~ 此時,comments底層存儲發生改變(屬性粘合到了一起) ~~~ "comments.name": [ "小魚兒" ], "comments.comment": [ "什么", "股票", "推薦" ], "comments.age": [ 28 ], "comments.stars": [ 4 ], "comments.date": [ 2014-09-01 ] } { "comments.name": [ "黃藥師" ], "comments.comment": [ "我", "喜歡", "投資", "房產", "風險", "收益", "大" ], "comments.age": [ 31 ], "comments.stars": [ 5 ], "comments.date": [ 2014-10-22 ] } { "title": [ "花無缺", "發表", "一篇", "帖子" ], "body": [ "我", "是", "花無缺", "大家", "要不要", "考慮", "一下", "投資", "房產", "買", "股票", "事情" ], "tags": [ "投資", "理財" ] } ~~~ * 重新插入數據 * 查詢方式改變 ~~~ GET /website/blogs/_search { "query": { "bool": { "must": [ { "match": { "title": "花無缺" } }, { "nested": { "path": "comments", "query": { "bool": { "must": [ { "match": { "comments.name": "黃藥師" } }, { "match": { "comments.age": 31 } } ] } } } } ] } } } ~~~ 此時,只有age=31可以查詢到我們想要的數據 ~~~ "_score": 3.6845634, "_source": { "title": "花無缺發表的一篇帖子", "content": "我是花無缺,大家要不要考慮一下投資房產和買股票的事情啊。。。", "tags": [ "投資", "理財" ], "comments": [ { "name": "小魚兒", "comment": "什么股票啊?推薦一下唄", "age": 28, "stars": 4, "date": "2016-09-01" }, { "name": "黃藥師", "comment": "我喜歡投資房產,風,險大收益也大", "age": 31, "stars": 5, "date": "2016-10-22" } ] } } ] } } ~~~ ## 2. nested object 聚合分析 1. 聚合數據分析的需求:按照評論日期進行bucket劃分,然后拿到每個月的評論的評分的平均值 ~~~ GET /website/blogs/_search { "size": 0, "aggs": { "comments_path": { "nested": { "path": "comments" # 指定類型為nested }, "aggs": { # 按照時間聚合 "group_by_comments_date": { "date_histogram": { "field": "comments.date", "interval": "month", "format": "yyyy-MM" }, "aggs": { "avg_stars": { "avg": { "field": "comments.stars" } } } } } } } } ~~~ 得到 ~~~ "aggregations": { "comments_path": { "doc_count": 2, "group_by_comments_date": { "buckets": [ { "key_as_string": "2016-09", "key": 1472688000000, "doc_count": 1, "avg_stars": { "value": 4 } }, { "key_as_string": "2016-10", "key": 1475280000000, "doc_count": 1, "avg_stars": { "value": 5 } } ] } } } } ~~~ 2. 按照年齡段來分組,然后按照tags分組 ~~~ GET /website/blogs/_search { "size": 0, "aggs": { "comments_path": { "nested": { "path": "comments" # 綁定為nested聚合comments對象中聚合 }, "aggs": { "group_by_comments_age": { "histogram": { "field": "comments.age", "interval": 10 }, "aggs": { "reverse_path": { "reverse_nested": {}, # 撤銷nested,在comments對象外聚合 "aggs": { "group_by_tags": { "terms": { "field": "tags.keyword" } } } } } } } } } } ~~~ 得到,20歲,投資理財各一個,因為只有一個doc,且`tag:[ "投資", "理財" ],` ~~~ "group_by_comments_age": { "buckets": [ { "key": 20, "doc_count": 1, "reverse_path": { "doc_count": 1, "group_by_tags": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": "投資", "doc_count": 1 }, { "key": "理財", "doc_count": 1 } ] } } }, { "key": 30, "doc_count": 1, "reverse_path": { "doc_count": 1, "group_by_tags": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": "投資", "doc_count": 1 }, { "key": "理財", "doc_count": 1 } ~~~ 3. 按照年齡段和評分 ~~~ GET /website/_search { "size": 0, "aggs": { "comments_nested": { "nested": { "path": "comments" # 綁定為nested聚合comments對象中聚合 }, "aggs": { "groupby_age": { "histogram": { "field": "comments.age", "interval": 10 }, "aggs": { "groupby_start": { "terms": { "field": "comments.stars" # 因為在comments內,不用解綁 } } } } } } } } ~~~
                  <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>

                              哎呀哎呀视频在线观看