国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Elasticsearch--查詢(nested、join)

這篇具有很好參考價值的文章主要介紹了Elasticsearch--查詢(nested、join)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

nested

嵌套類型

數(shù)據(jù)的某個值是json、object對象;不再是簡單的數(shù)據(jù)類型,或者簡單數(shù)據(jù)類型的數(shù)組;那么還用之前的查詢方式就有問題了。因為ES在存儲復(fù)雜類型的時候會把對象的復(fù)雜層次結(jié)果扁平化為一個鍵值對列表 。此時,需要用nested進(jìn)行查詢

扁平化存儲

Elasticsearch--查詢(nested、join),elasticsearch?

?用法

使用nested查詢的時候,在設(shè)置mapping的時候,也要指定字段類型為nested

PUT <index_name>
{
  "mappings": {
    "properties": {
      "<nested_field_name>": {
        "type": "nested"
      }
    }
  }
}

查詢?

GET /my-index-000001/_search
{
  "query": {
    "nested": {
      "path": "obj1",
      "query": {
        "bool": {
          "must": [
            { "match": { "obj1.name": "blue" } },
            { "range": { "obj1.count": { "gt": 5 } } }
          ]
        }
      },
      "score_mode": "avg"
    }
  }
}
  • path:nested對象的查詢深度

  • score_mode:評分計算方式

    • avg (默認(rèn)):使用所有匹配的子對象的平均相關(guān)性得分。

    • max:使用所有匹配的子對象中的最高相關(guān)性得分。

    • min:使用所有匹配的子對象中最低的相關(guān)性得分。

    • none:不要使用匹配的子對象的相關(guān)性分?jǐn)?shù)。該查詢?yōu)楦肝臋n分配得分為0。

    • sum:將所有匹配的子對象的相關(guān)性得分相加。

Join

父子級關(guān)系?

join和nested一樣,需要在設(shè)置mapping的時候,設(shè)置字段類型

mapping

PUT msb_depart
{
  "mappings": {
    "properties": {
      "msb_join_field": {
        "type": "join",
        "relations": {
          "depart": "employee"
        }
      },
      "my_id": {
        "type": "keyword"
      }
    }
  }
}

插入父級數(shù)據(jù)

PUT msb_depart/_doc/1
{
  "my_id": 1,
  "name":"教學(xué)部",
  "msb_join_field":{
    "name":"depart"
  }
}
PUT msb_depart/_doc/2
{
  "my_id": 2,
  "name":"咨詢部",
  "msb_join_field":{
    "name":"depart"
  }
}

連接數(shù)據(jù)類型是一個特殊字段,它在同一索引的文檔中創(chuàng)建父/子關(guān)系。關(guān)系部分在文檔中定義了一組可能的關(guān)系,每個關(guān)系是一個父名和一個子名

插入子級數(shù)據(jù)需要指定routing路由,因為父文檔和子文檔必須在同一個分片建立索引

插入子級數(shù)據(jù)

PUT msb_depart/_doc/3?routing=1&refresh
{
  "my_id": 3,
  "name":"馬老師",
  "msb_join_field":{
    "name":"employee",
    "parent":1
  }
}
PUT msb_depart/_doc/4?routing=1&refresh
{
  "my_id": 4,
  "name":"周老師",
  "msb_join_field":{
    "name":"employee",
    "parent":1
  }
}

搜索所有父級數(shù)據(jù)

GET msb_depart/_search
{
  "query": {
    "has_child": {
      "type": "employee",
      "query": {
        "match_all": {}
      }
    }
  }
}

搜索所有子級

{
  "query": {
    "has_parent": {
      "parent_type": "depart",
      "query": {
        "match": {
          "name.keyword": "咨詢部"
        }
      }
    }
  }
}

join類型不能像關(guān)系數(shù)據(jù)庫中的表鏈接那樣去用,不論是has_child或者是has_parent查詢都會對索引的查詢性能有嚴(yán)重的負(fù)面影響。并且會觸發(fā)global ordinals

join合適應(yīng)用場景是:當(dāng)索引數(shù)據(jù)包含一對多的關(guān)系,并且其中一個實體的數(shù)量遠(yuǎn)遠(yuǎn)超過另一個的時候。

關(guān)聯(lián)關(guān)系處理優(yōu)先級

Object>nested>join

Object類型

通俗點就是通過字段冗余,以一張大寬表來實現(xiàn)粗粒度的index,這樣可以充分發(fā)揮扁平化的優(yōu)勢。但是這是以犧牲索引性能及靈活度為代價的。

使用的前提:冗余的字段應(yīng)該是很少改變的;比較適合與一對少量關(guān)系的處理。

當(dāng)業(yè)務(wù)數(shù)據(jù)庫并非采用非規(guī)范化設(shè)計時,這時要將數(shù)據(jù)同步到作為二級索引庫的ES中,就很難使用上述增量同步方案,必須進(jìn)行定制化開發(fā),基于特定業(yè)務(wù)進(jìn)行應(yīng)用開發(fā)來處理join關(guān)聯(lián)和實體拼接

嵌套對象

索引性能和查詢性能二者不可兼得,必須進(jìn)行取舍。嵌套文檔將實體關(guān)系嵌套組合在單文檔內(nèi)部(類似與json的一對多層級結(jié)構(gòu))

這種方式犧牲索引性能(文檔內(nèi)任一屬性變化都需要重新索引該文檔)來換取查詢性能,可以同時返回關(guān)系實體,比較適合于一對少量的關(guān)系處理。當(dāng)使用嵌套文檔時,使用通用的查詢方式是無法訪問到的,必須使用合適的查詢方式(nested query、nested filter、nested facet等),很多場景下,使用嵌套文檔的復(fù)雜度在于索引階段對關(guān)聯(lián)關(guān)系的組織拼裝

父子級關(guān)系

父子文檔犧牲了一定的查詢性能來換取索引性能,適用于一對多的關(guān)系處理。其通過兩種type的文檔來表示父子實體,父子文檔的索引是獨立的。父-子文檔ID映射存儲在 Doc Values 中。當(dāng)映射完全在內(nèi)存中時, Doc Values 提供對映射的快速處理能力,另一方面當(dāng)映射非常大時,可以通過溢出到磁盤提供足夠的擴(kuò)展能力。 在查詢parent-child替代方案時,發(fā)現(xiàn)了一種filter-terms的語法,要求某一字段里有關(guān)聯(lián)實體的ID列表?;镜脑硎窃趖erms的時候,對于多項取值,如果在另外的index或者type里已知主鍵id的情況下,某一字段有這些值,可以直接嵌套查詢。

具體可參考官方文檔的示例:通過用戶里的粉絲關(guān)系,微博和用戶的關(guān)系,來查詢某個用戶的粉絲發(fā)表的微博列表。文章來源地址http://www.zghlxwxcb.cn/news/detail-593513.html

到了這里,關(guān)于Elasticsearch--查詢(nested、join)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • ElasticSearch之Nested對象

    ElasticSearch之Nested對象

    本文看下es的nested嵌套對象相關(guān)內(nèi)容。 在關(guān)系型數(shù)據(jù)庫中定義了6大數(shù)據(jù)庫范式,即1,2,3,BC,4,5的NF(normal form),分別如下: 數(shù)據(jù)庫范式的目的在于減少更新的復(fù)雜度,以及降低磁盤的存儲空間。其中對于第二個問題存儲設(shè)備目前非常廉價而且容量很大,所以不是什么問題

    2024年03月28日
    瀏覽(21)
  • Elasticsearch 復(fù)雜類型 Nested

    復(fù)雜類型 建模到底是個什么東東? 建模解決什么問題? 復(fù)雜類型的的檢索問題 主要解決復(fù)雜類型無法搜索的問題 nested屬于object類型的一種,是Elasticsearch中用于復(fù)雜類型對象數(shù)組的索引操作。Elasticsearch沒有內(nèi)部對象的概念,因此,ES在存儲復(fù)雜類型的時候會把對象的 復(fù)雜層次

    2024年02月13日
    瀏覽(20)
  • Elasticsearch:如何修改 nested 字段的值

    Nested 類型是 object 數(shù)據(jù)類型的特殊版本,它允許對象數(shù)組以一種可以彼此獨立查詢的方式進(jìn)行索引。在內(nèi)部,嵌套對象將數(shù)組中的每個對象索引為單獨的隱藏文檔,這意味著每個嵌套對象都可以使用 nested query 獨立于其他對象進(jìn)行查詢。每個 nested 對象都被索引為一個單獨的

    2024年02月14日
    瀏覽(18)
  • 深入了解ElasticSearch的Nested數(shù)據(jù)類型

    深入了解ElasticSearch的Nested數(shù)據(jù)類型

    這個時候就需要用到nested,nested類型是object數(shù)據(jù)類型的特殊版本,它允許對象數(shù)組以一種可以相互獨立查詢的方式進(jìn)行索引。 在Nested內(nèi)部,每個對象索引其實是一個單獨的隱藏文檔,這意味著每個嵌套對象都可以獨立于其他對象進(jìn)行查詢。 使用Nested需要先創(chuàng)建索引,依舊通

    2024年04月10日
    瀏覽(17)
  • 6.ELK之Elasticsearch嵌套(Nested)類型

    6.ELK之Elasticsearch嵌套(Nested)類型

    在Elasticsearch實際應(yīng)用中經(jīng)常會遇到嵌套文檔的情況,而且會有“對象數(shù)組彼此獨立地進(jìn)行索引和查詢的訴求”。在ES中這種嵌套文檔稱為父子文檔,父子文檔“彼此獨立地進(jìn)行查詢”至少有以下兩種方式: 1)父子文檔。在ES的5.x版本中通過parent-child父子type實現(xiàn),即一個索引

    2024年02月03日
    瀏覽(17)
  • ElasticSearch第五講 ES nested嵌套文檔與父子文檔處理

    在ES中,處理實體之間的關(guān)系并不像關(guān)系型存儲那樣明顯。在關(guān)系數(shù)據(jù)庫中的黃金準(zhǔn)則 - 數(shù)據(jù)規(guī)范化,在ES中并不適用。在處理關(guān)聯(lián)關(guān)系,嵌套對象和父子關(guān)聯(lián)關(guān)系中,我們會討論幾種可行方案的優(yōu)點和缺點。 緊接著在為可擴(kuò)展性而設(shè)計中,我們會討論ES提供的一些用來快速靈

    2024年02月02日
    瀏覽(22)
  • Elasticsearch中object類型與nested類型以及數(shù)組之間的區(qū)別

    0、一般情況下用object 類型來查es中為json對象的字段數(shù)據(jù),用nested來查es中為JsonArray數(shù)組類型的字段數(shù)據(jù)。 1、默認(rèn)情況下ES會把JSON對象直接映射為object類型,只有手動設(shè)置才會映射為nested類型 2、object類型可以直接使用普通的逗號(.)查詢,比如 3、nested類型的查詢需要使用

    2024年01月22日
    瀏覽(93)
  • Elasticsearch實戰(zhàn)(二十四)---ES數(shù)據(jù)建模一對多模型Nested結(jié)構(gòu)

    Elasticsearch實戰(zhàn)(二十四)---ES數(shù)據(jù)建模一對多模型Nested結(jié)構(gòu)

    我們?nèi)绾伟袽ysql的模型合理的在ES中去實現(xiàn)? 就需要你對要存儲的數(shù)據(jù)足夠的了解,及對應(yīng)用場景足夠的深入分析,才能建立一個合適的模型,便于你后期擴(kuò)展 一對一 模型 一對多 模型 多對多 模型 上一篇,我們介紹了 一對多模型,采用Object對象存儲的巨大缺陷,本篇文章,我們

    2024年02月14日
    瀏覽(23)
  • Elasticsearch 8.X 如何依據(jù) Nested 嵌套類型的某個字段進(jìn)行排序?

    Elasticsearch 8.X 如何依據(jù) Nested 嵌套類型的某個字段進(jìn)行排序?

    這是來自社區(qū)的一個真實企業(yè)場景問題。 https://elasticsearch.cn/question/13135 如下所示, 希望在查出的結(jié)果后, 對結(jié)果進(jìn)行后處理,對tags列表,根據(jù)depth進(jìn)行排序。 Elasticsearch 能支持的排序方式羅列如下: 包含但不限于: 基于特定字段的排序 基于Nested對象字段的排序 基于特定

    2024年02月02日
    瀏覽(20)
  • elasticsearch中的數(shù)據(jù)類型:flattened和join

    flattened:比如你有一個字段的值是一個json,這個json里面又有很多字段,你又不想一個一個的定義這些字段到mapping,就可以用flattened 直接動手:創(chuàng)建索引: 注意這里detail字段類型為flattened, 然后插入文檔: 然后搜索: 注意這里直接搜索detail,可以搜索到我們剛剛插入的那個

    2024年02月12日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包