日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

触类旁通Elasticsearch:关联

發(fā)布時(shí)間:2023/12/14 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 触类旁通Elasticsearch:关联 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

一、文檔間關(guān)系概覽

1. 對(duì)象類型

2. 嵌套類型

3. 父子關(guān)系

4. 反規(guī)范化

二、將對(duì)象最為字段值

1. 映射和索引對(duì)象

2. 搜索對(duì)象

三、嵌套類型

1. 映射并索引嵌套文檔

2. 搜索和聚合嵌套文檔

四、父子關(guān)系

1. 子文檔的索引、更新和刪除

2. 在父文檔和子文檔中搜索

五、反規(guī)范化

1. 反規(guī)范化使用案例

2. 索引、更新和刪除反規(guī)范化的數(shù)據(jù)

3. 查詢反規(guī)范化的數(shù)據(jù)


《Elasticsearch In Action》學(xué)習(xí)筆記。

? ? ? ? ES本身不支持SQL數(shù)據(jù)庫(kù)的join操作,在ES中定義關(guān)系的方法有對(duì)象類型、嵌套文檔、父子關(guān)系和反規(guī)范化。

一、文檔間關(guān)系概覽

1. 對(duì)象類型

? ? ? ? 允許將一個(gè)對(duì)象作為文檔字段的值,主要用于處理一對(duì)一關(guān)系。如果用對(duì)象類型表示一對(duì)多關(guān)系,可能出現(xiàn)邏輯上的錯(cuò)誤。例如,使用對(duì)象類型(object type)表示一個(gè)小組多個(gè)活動(dòng)的關(guān)系:

{"name": "Denver technology group""events": [{"date": "2014-12-22","title": "Introduction to Elasticsearch"},{"date": "2014-06-20","title": "Introduction to Hadoop"}] }

? ? ? ? 如果希望搜索一個(gè)關(guān)于Elasticsearch的活動(dòng)分組,可以在events.title字段里搜索。在系統(tǒng)內(nèi)部,文檔是像下面這樣進(jìn)行索引的:

{"name": "Denver technology group","events.date": ["2014-12-22", "2014-06-20"],"events.title": ["Introduction to Elasticsearch", "Introduction to Hadoop"] }

? ? ? ? 假設(shè)想過濾2014年12月主辦過Hadoop會(huì)議的分組,查詢可以是這樣的:

"bool": {"must": [{"term": {"events.title": "Hadoop"}},{"range": {"events.date": {"from": "2014-12-01","to": "2014-12-31"}}}] }

? ? ? ? 這將匹配例中的那個(gè)文檔,但顯然錯(cuò)誤的,Hadoop活動(dòng)是在6月而不是12月。造成這種錯(cuò)誤的原因是對(duì)象類型將所有數(shù)據(jù)都存儲(chǔ)在一篇文檔中,ES并不知道內(nèi)部文檔之間的邊界,如圖1所示。

圖1 在存儲(chǔ)的時(shí)候,內(nèi)部對(duì)象的邊界并未考慮在內(nèi),這導(dǎo)致了意外的搜索結(jié)果

?

? ? ? ? 如果處理的是一對(duì)一關(guān)系,則不會(huì)出現(xiàn)這樣的邏輯錯(cuò)誤,而且對(duì)象類型是最快、最便捷的關(guān)系處理方法。ES的關(guān)系類型類似Oracle中的嵌套表。

2. 嵌套類型

? ? ? ? 要避免跨對(duì)象匹配的發(fā)生,可以使用嵌套類型(nested type),它將活動(dòng)索引到分隔的Lucene文檔。對(duì)象與嵌套的區(qū)別在于映射,這會(huì)促使ES將嵌套的內(nèi)部對(duì)象索引到鄰近的位置,但是保持獨(dú)立的Lucene文檔,如圖2所示。在搜索時(shí),需要使用nested過濾器和查詢,這些會(huì)在Lucene文檔中搜索。

圖2 嵌套類型使得ES將多個(gè)對(duì)象索引到多個(gè)分隔的Lucene文檔

?

? ? ? ? 在某些用例中,像對(duì)象和嵌套類型那樣,將所有數(shù)據(jù)存儲(chǔ)在同一個(gè)ES文檔中不見得是明智之舉。拿分組和活動(dòng)的例子來說:如果一個(gè)分組所有數(shù)據(jù)都放在同一篇文檔中,那么在創(chuàng)建一項(xiàng)新的活動(dòng)時(shí),不得不為這個(gè)活動(dòng)重新索引整篇文檔。這可能會(huì)降低性能和并發(fā)性,取決于文檔有多大,以及操作的頻繁程度。

3. 父子關(guān)系

? ? ? ? 通過父子關(guān)系,可以使用完全不同的ES文檔,并在映射中定義文檔間的關(guān)系。在索引一個(gè)子文檔時(shí),可以將它指向其父文檔,如圖3所示。在搜索時(shí),可以使用has_parent和has_child查詢和過濾器處理父子關(guān)系。

圖3 不同ES文檔可以有父子關(guān)系

?

4. 反規(guī)范化

? ? ? ? 對(duì)象、嵌套和父子關(guān)系可以用于處理一對(duì)一或一對(duì)多關(guān)系,而反規(guī)范化用于處理多對(duì)多關(guān)系。反規(guī)范化(denormalizing)意味著一篇文檔將包含所有相關(guān)的數(shù)據(jù),即使是同樣的數(shù)據(jù)在其它文檔中有復(fù)本。

? ? ? ? 以分組和會(huì)員為例,一個(gè)分組可以擁有多個(gè)會(huì)員,一個(gè)用戶也可以成為多個(gè)分組的會(huì)員。分組和會(huì)員都有它們自己的一組屬性。為了表示這種關(guān)系,可以讓分組成為會(huì)員的父輩。對(duì)于身為多個(gè)分組會(huì)員的用戶而言,可以反規(guī)范化他們的數(shù)據(jù):每次表示一個(gè)其所屬的分組,如圖4所示。反規(guī)范化實(shí)際上是一種典型的以空間(數(shù)據(jù)冗余)換時(shí)間的處理方式。

圖4 反規(guī)范化技術(shù)將數(shù)據(jù)進(jìn)行復(fù)制,避免了高成本的關(guān)系處理

?

二、將對(duì)象最為字段值

? ? ? ? 通過對(duì)象,ES在內(nèi)部將層級(jí)結(jié)構(gòu)進(jìn)行了扁平化,使用每個(gè)內(nèi)部字段的全路徑,將其放入Lucene內(nèi)的獨(dú)立字段。整個(gè)流程如圖5所示。

圖5 JSON層次結(jié)構(gòu),在Lucene中被存儲(chǔ)為扁平結(jié)構(gòu)

?

1. 映射和索引對(duì)象

? ? ? ? 默認(rèn)情況下,內(nèi)部對(duì)象的映射是自動(dòng)識(shí)別的。

# 自動(dòng)創(chuàng)建索引 curl -XPOST '172.16.1.127:9200/event-object/_doc/1?pretty' -H 'Content-Type: application/json' -d' {"title": "Introduction to objects","location":?{"name": "Elasticsearch in Action book","address": "chapter 8"} }'# 查看索引映射 curl '172.16.1.127:9200/event-object/_mapping?pretty'

? ? ? ? 結(jié)果返回:

{"event-object" : {"mappings" : {"_doc" : {"properties" : {"location" : {"properties" : { ? ? ? ? ? ? ? ? ? ?# 內(nèi)部對(duì)象及其屬性的映射是自動(dòng)識(shí)別的"address" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}},"name" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}}}},"title" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}}}}}} }

? ? ? ? 如果有多個(gè)這樣的對(duì)象所構(gòu)成的數(shù)組,單個(gè)內(nèi)部對(duì)象的映射同樣奏效。例如,如果索引了下面的文檔,映射將會(huì)保持不變。

curl -XPOST '172.16.1.127:9200/event-object/_doc/2?pretty' -H 'Content-Type: application/json' -d' {"title": "Introduction to objects","location": [{"name": "Elasticsearch in Action book","address": "chapter 8"},{"name": "Elasticsearch Guide","address": "elasticsearch/reference/current/mapping-object-type.html"} ] }'

2. 搜索對(duì)象

? ? ? ? 默認(rèn)情況下,需要設(shè)置所查找的字段路徑,來引用內(nèi)部對(duì)象。下面的代碼指定location_event.name的全路徑將其作為搜索的字段,從而搜索在辦公室舉辦的活動(dòng)。

EVENT_PATH="172.16.1.127:9200/get-together/" curl "$EVENT_PATH/_search?q=location_event.name:office&pretty"

? ? ? ? 下面的terms聚合返回了location.name字段中最為常用的單詞。

curl "172.16.1.127:9200/get-together/_search?pretty" -H 'Content-Type: application/json' -d' {"aggs": {"location_cloud": {"terms": {"field": "location.name"}}} }'

? ? ? ? 再次強(qiáng)調(diào),對(duì)象擅于處理一對(duì)一關(guān)系,而對(duì)于一對(duì)多關(guān)系的查詢,可能出現(xiàn)邏輯錯(cuò)誤。

三、嵌套類型

1. 映射并索引嵌套文檔

? ? ? ? 嵌套映射和對(duì)象映射看上去差不多,不過期type不是object,而必須是nested。

# 定義索引映射 curl -XPUT "172.16.1.127:9200/group-nested?pretty" -H 'Content-Type: application/json' -d' {"mappings": {"_doc": {"properties": {"name": {"type": "text"},"members": {"type": "nested", ? ? ? ? ? ? ? ? ? ? # 這里告訴ES將會(huì)員對(duì)象索引到同一個(gè)分塊中的不同文檔中"properties": {"first_name": {"type": "text"},"last_name": {"type": "text"}}}}}} }'# 增加一篇文檔 curl -XPUT "172.16.1.127:9200/group-nested/_doc/1?pretty" -H 'Content-Type: application/json' -d' {"name": "Elasticsearch News", ? ? ? ? ? ? ? ? # 這個(gè)屬性將存入主文檔"members": [{"first_name": "Lee", ? ? ? ? ? ? ? ? ? ? ?# 這些對(duì)象存入自己的文檔中,共同組成根文檔中的一個(gè)分塊"last_name": "Hinman"},{"first_name": "Radu","last_name": "Gheorghe"}] }'

? ? ? ? 與對(duì)象不同,嵌套查詢和過濾器可以在文檔的邊界之內(nèi)搜索。例如,可以搜索名為“Lee”且姓為“Hinman”的分組會(huì)員。缺省時(shí),嵌套的查詢不會(huì)進(jìn)行跨多個(gè)對(duì)象的匹配,因此避免了名為“Lee”而姓為“Gheorghe”這樣的意外匹配。

2. 搜索和聚合嵌套文檔

? ? ? ? 使用nested在嵌套文檔上運(yùn)行搜索和聚合,使ES連接在同一個(gè)分塊中的多個(gè)Lucene文檔,并將連接后的結(jié)果數(shù)據(jù)看作普通的ES文檔。

(1)Nested查詢和過濾器
? ? ? ? 運(yùn)行nested查詢或過濾器時(shí),需要指定path參數(shù),告訴ES這些嵌套對(duì)象位于哪里的Lucene分塊中。除夕之外,nested查詢或者過濾器將會(huì)分別封裝一個(gè)常規(guī)的查詢或過濾器。下面的代碼搜索名為“Lee”、姓為“Gheorghe”的會(huì)員。查詢不會(huì)返回匹配的文檔,因?yàn)闆]有會(huì)員的名字是Lee Gheorghe。

curl '172.16.1.127:9200/group-nested/_search?pretty' -H 'Content-Type: application/json' -d' {"query": {"nested": {"path": "members", ? ? ? ? ? ? ? ? ? ? ? ?# 在members中查找嵌套的文檔"query": { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 通常在同一篇文檔中的對(duì)象上運(yùn)行查詢"bool": {"must": [{ "term": { "members.first_name": "lee" }},{ "term": { "members.last_name": ?"gheorghe" }}?]}}}} }'

(2)在多個(gè)嵌套層級(jí)上搜索
? ? ? ? ES支持多級(jí)嵌套。下面的代碼創(chuàng)建兩級(jí)嵌套的索引:會(huì)員(members)和他們的評(píng)論(comments)。

curl -XPUT "172.16.1.127:9200/group-multinested?pretty" -H 'Content-Type: application/json' -d' {"mappings": {"_doc": {"properties": {"name": {"type": "text"},"members": {"type": "nested","properties": {"first_name": {"type": "text"},"last_name": {"type": "text"},"comments": {"type": "nested","include_in_parent": true,"properties": {"date": {"type": "date","format": "dateOptionalTime"},"comment": {"type": "text"}}}}}}}} }'

? ? ? ? 添加一個(gè)嵌套文檔:

curl -XPUT "172.16.1.127:9200/group-multinested/_doc/1?pretty" -H 'Content-Type: application/json' -d' {"name": "Elasticsearch News","members": {"first_name": "Radu","last_name": "Gheorghe","comments": { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 多個(gè)會(huì)員對(duì)象嵌套于分組中,而多個(gè)評(píng)論對(duì)象又嵌套在會(huì)員對(duì)象中"date": "2013-12-22","comment": "hello world"}} }'

? ? ? ? 為了在內(nèi)嵌的評(píng)論文檔中搜索,需要指定members.comments的路徑:

curl '172.16.1.127:9200/group-multinested/_search?pretty' -H 'Content-Type: application/json' -d' {"query": {"nested": {"path": "members.comments", ? ? ? ? ? ? ? # 查找位于members之中的comments字段"query": {"term": {"members.comments.comment": "hello" ? # 查詢?nèi)匀惶峁┝俗侄蔚娜柯窂接糜诓檎襺}}} }'

(3)整合嵌套對(duì)象的得分
? ? ? ? 一個(gè)nested查詢會(huì)計(jì)算得分。例如,根據(jù)查詢條件的匹配程度,每個(gè)內(nèi)部會(huì)員文檔會(huì)得到自己的得分。但是來自應(yīng)用的查詢是為了查找分組文檔,所以ES需要為整個(gè)分組文檔給出一個(gè)得分。在這點(diǎn)上一共有4中選項(xiàng),通過score_mode設(shè)置。

  • avg:這是默認(rèn)選項(xiàng),系統(tǒng)獲取所有匹配的內(nèi)部文檔之分?jǐn)?shù),并返回其平均分。
  • total:系統(tǒng)獲取所有匹配的內(nèi)部文檔之分?jǐn)?shù),將其求和并返回。
  • max:返回匹配的內(nèi)部文檔之最大得分。
  • none:考慮總文檔得分的計(jì)算時(shí),不保留、不統(tǒng)計(jì)嵌套文檔的得分。

(4)獲知哪些內(nèi)部文檔匹配上了

? ? ? ? 可以在嵌套查詢或過濾器中添加一個(gè)inner_hits對(duì)象,來展示匹配上的嵌套文檔。

curl '172.16.1.127:9200/group-nested/_search?pretty' -H 'Content-Type: application/json' -d' {"query": {"nested": {"path": "members","query": {"term": {"members.first_name": "lee"}},"inner_hits": {"from": 0,"size": 1}}} }'

? ? ? ? 結(jié)果返回:

..."inner_hits" : {"members" : {"hits" : {"total" : 1,"max_score" : 0.6931472,"hits" : [{"_index" : "group-nested","_type" : "_doc","_id" : "1","_nested" : {"field" : "members","offset" : 0},"_score" : 0.6931472,"_source" : {"first_name" : "Lee","last_name" : "Hinman"}}]}}}

? ? ? ? 要識(shí)別子文檔,可以查看_nested對(duì)象。其中field字段是嵌套對(duì)象的路徑,而offset顯示了嵌套文檔在數(shù)組中的位置。上例中,Lee是查詢結(jié)果中的第一個(gè)member。

(5)嵌套和逆向嵌套聚合
? ? ? ? 為了在嵌套類型的對(duì)象上進(jìn)行聚合,需要使用nested聚合。這是一個(gè)單桶聚合,在其中可以指定包含所需字段的嵌套對(duì)象之路徑。如圖6所示,nested聚合促使ES進(jìn)行了必要的連接,以確保其它聚合在指定的路徑上能正常運(yùn)行。

圖6 嵌套聚合執(zhí)行了必要的連接,讓其它聚合可以運(yùn)行在指定的路徑上

?

? ? ? ? 例如,為了獲得參與分組最多的活躍用戶,通常會(huì)在會(huì)員名字字段上運(yùn)行一個(gè)terms聚合。如果這個(gè)name字段存儲(chǔ)在嵌套類型的members對(duì)象中,那么需要將terms聚合封裝在nested聚合中,并將聚合的路徑path設(shè)置為會(huì)員members:

curl '172.16.1.127:9200/get-together/_search?pretty' -H 'Content-Type: application/json' -d' {"aggs": {"members": {"nested": {"path": "members"},"aggs": {"frequent_members": {"terms": {"field": "members.name"}}}}} }'

? ? ? ? 有些情況下,需要反向訪問父輩或者根文檔。例如,希望針對(duì)活躍會(huì)員,展示他們參加最多的分組之tags。為了實(shí)現(xiàn)這一點(diǎn),使用reverse_nested聚合,它會(huì)告訴ES在嵌套層級(jí)中向上返回查找:

curl -X PUT "172.16.1.127:9200/get-together/_mapping/_doc?pretty" -H 'Content-Type: application/json' -d' {"properties": {"tags": {?"type": ? ? "text","fielddata": true}} }'curl '172.16.1.127:9200/get-together/_search?pretty' -H 'Content-Type: application/json' -d' {"aggs": {"members": {"nested": {"path": "members"},"aggs": {"frequent_members": {"terms": {"field": "member.name"},"aggs": {"back_to_group": {"reverse_nested": {},"aggs": {"tags_per_member": {"terms": {"field": "tags"}}}}}}}}} }'

? ? ? ? Nested和reverse_nested聚合可以快速告訴ES,在哪些Lucene文檔中查找下一項(xiàng)聚合的字段。

四、父子關(guān)系

? ? ? ? 在嵌套的文檔中,實(shí)際情況是所有內(nèi)部的對(duì)象集中在同一個(gè)分塊中的Lucene文檔,這對(duì)于對(duì)象便捷地連接根文檔而言,是非常有好處的。父子文檔則是完全不同的ES文檔,所以只能分別搜索它們,效率更低。

? ? ? ? 對(duì)于文檔的索引、更新和刪除而言,父子的方式就顯得出類拔萃了。這是因?yàn)楦篙吅妥虞呂臋n都是獨(dú)立的ES文檔,各自管理。舉例來說,如果一個(gè)分組有很多活動(dòng),要增加一個(gè)新活動(dòng),那么就是增加一篇新的活動(dòng)文檔。如果使用嵌套類型的方式,ES不得不重新索引分組文檔,來囊括新的活動(dòng)和全部已有活動(dòng),這個(gè)過程就會(huì)更慢。

1. 子文檔的索引、更新和刪除

(1)映射
? ? ? ? 在示例索引get-together的映射中定義了一對(duì)父子關(guān)系屬性如下;

..."relationship_type": { ? ? ? ? ? ? ? ? ? ? ?# 屬性名稱"type": "join", ? ? ? ? ? ? ? ? ? ? ? ? ? # 類型為join"relations" : { ? ? ? ? ? ? ? ? ? ? ? ? ? # 父子關(guān)系中g(shù)roup為父名稱、event為子名稱"group": "event"}}, ...

(2)索引和檢索
? ? ? ? 索引子文檔時(shí),需要在URI中放置routing值作為參數(shù)。routing字段向ES提供了散列的ID,即路由值,這使得ES將父子文檔路由到相同的分片,搜索的時(shí)候能從中獲益。ES會(huì)自動(dòng)使用這個(gè)路由值來查詢父輩的分片并獲得其子輩,或者是查詢子輩的分片來獲得其父輩。

curl -X PUT "172.16.1.127:9200/get-together/_doc/1103?routing=2&refresh&pretty" -H 'Content-Type: application/json' -d' {"host": "Radu","title": "Yet another Elasticsearch intro in Denver","relationship_type": {"name": "event", ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 表示ID為1103的文檔是子文檔event"parent": "2" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 其對(duì)應(yīng)的父文檔ID為2} }'

? ? ? ? routing參數(shù)是強(qiáng)制的,如果不加該參數(shù),報(bào)錯(cuò)如下:

{"error" : {"root_cause" : [{"type" : "mapper_parsing_exception","reason" : "failed to parse"}],"type" : "mapper_parsing_exception","reason" : "failed to parse","caused_by" : {"type" : "illegal_argument_exception","reason" : "[routing] is missing for join field [relationship_type]"}},"status" : 400 }

? ? ? ? 當(dāng)索引子文檔時(shí),其父輩文檔可能已經(jīng)被索引,也可能尚未索引。這類似于關(guān)系數(shù)據(jù)庫(kù)中的主子表之間沒有強(qiáng)制的外鍵約束。在上例中,當(dāng)索引event子文檔1103時(shí),其對(duì)應(yīng)的group父文檔2可以并不存在。

? ? ? ? _routing字段是被存儲(chǔ)的,因此可以檢索其內(nèi)容。同時(shí),這個(gè)字段也是被索引的,這樣可以通過條件來搜索其值。為了檢索一篇活動(dòng)文檔,這里運(yùn)行了一個(gè)普通的索引請(qǐng)求:

curl '172.16.1.127:9200/get-together/_doc/1103?routing=2&pretty'

? ? ? ? 結(jié)果返回:

{"_index" : "get-together","_type" : "_doc","_id" : "1103","_version" : 1,"_routing" : "2","found" : true,"_source" : {"host" : "Radu","title" : "Yet another Elasticsearch intro in Denver","relationship_type" : {"name" : "event","parent" : "2"}} }

? ? ? ? 如果請(qǐng)求中不加routing=2,查詢會(huì)路由到1103的散列分片上去,而不是2的散列分片,最終導(dǎo)致查詢不到相應(yīng)的文檔。再者,子文檔ID,如1103在索引中并不唯一,只有parent ID和_id的組合才是唯一的。

(3)更新與刪除
? ? ? ? 類似地,更新與刪除子文檔同樣需要指定routing參數(shù)。

curl -X POST '172.16.1.127:9200/get-together/_doc/1103/_update?routing=2&pretty' -H 'Content-Type: application/json' -d ' {"doc": {"description": "Gives an overview of Elasticsearch"} }'curl -X DELETE '172.16.1.127:9200/get-together/_doc/1103?routing=2&pretty'

? ? ? ? 通過查詢來進(jìn)行的刪除,不需要指定routing參數(shù):

curl -X POST "172.16.1.127:9200/get-together/_delete_by_query?pretty" -H 'Content-Type: application/json' -d' {"query": {"query_string": {"fields": ["host"],"query": "radu"}} }'

2. 在父文檔和子文檔中搜索

(1)has_child查詢和過濾器
? ? ? ? 使用子輩的條件來搜索父輩的時(shí)候,如搜索Elasticsearch活動(dòng)的分組,可以使用has_child查詢或過濾器。

curl -X GET "172.16.1.127:9200/get-together/_doc/_search?pretty" -H 'Content-Type: application/json' -d' {"query": {"has_child" : {"type" : "event","query" : {"term" : {"title" : "elasticsearch"}}}} }'

? ? ? ? has_child查詢和這個(gè)過濾器的運(yùn)行方式差不多,不過它可以通過聚合子文檔的得分,對(duì)每個(gè)父輩進(jìn)行評(píng)分??梢詫core_mode設(shè)置為max、sum、avg或none,和嵌套查詢是一樣的。例如,如下查詢?cè)诜祷胤纸M時(shí),按照舉辦的Elasticsearch活動(dòng)之最高相關(guān)性排序:

curl -X GET "172.16.1.127:9200/get-together/_doc/_search?pretty" -H 'Content-Type: application/json' -d' {"query": {"has_child": {"type": "event","score_mode": "max","query": {"term": {"title": "elasticsearch"}}}} }'

(2)在結(jié)果中獲得子文檔
? ? ? ? 默認(rèn)情況下,has_child查詢只會(huì)返回父文檔,不會(huì)返回子文檔。通過添加inner_hits選項(xiàng)可以獲得子文檔:

curl -X GET "172.16.1.127:9200/get-together/_doc/_search?pretty" -H 'Content-Type: application/json' -d' {"query": {"has_child": {"type": "event","score_mode": "max","query": {"term": {"title": "elasticsearch"}},"inner_hits": {}}} }'

(3)has_parent查詢和過濾器
? ? ? ? 使用父輩的條件來搜索子輩的時(shí)候使用has_parent查詢或過濾器。下面的代碼展示了如何搜索關(guān)于Elasticsearch的活動(dòng),而且它們只在Denver舉辦。

curl -X GET "172.16.1.127:9200/get-together/_doc/_search?pretty" -H 'Content-Type: application/json' -d' {"query": {"bool": {"must": [ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 主查詢包含兩個(gè)必須滿足的子查詢{"term": {"title": "elasticsearch" ? ? ? ? ? ?# 這個(gè)查詢運(yùn)行在活動(dòng)上,確保標(biāo)題中包含“elasticsearch”關(guān)鍵字}},{"has_parent": {"parent_type": "group","query": {"term": {"location_group": "denver" ? ? ?# 這個(gè)查詢運(yùn)行在每個(gè)活動(dòng)的分組上,確?;顒?dòng)在Denver舉辦}}}}]}} }'

(4)子輩聚合
? ? ? ? ES允許在子文檔上嵌入聚合。假設(shè)已經(jīng)通過詞條聚合,獲得了get-together分組中最流行的標(biāo)簽。對(duì)于這些標(biāo)簽,需要知道每個(gè)標(biāo)簽的分組中,誰是最積極的活動(dòng)參與者。下面代碼在標(biāo)簽的terms聚合下嵌套了children聚合,以此來發(fā)現(xiàn)這類會(huì)員。在children聚合中,又嵌套了另一個(gè)terms聚合來統(tǒng)計(jì)每個(gè)標(biāo)簽所對(duì)應(yīng)的活動(dòng)參與者。

curl "172.16.1.127:9200/get-together/_search?pretty" -H 'Content-Type: application/json' -d' {"aggs": {"top-tags": { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 標(biāo)簽聚合為每個(gè)標(biāo)簽創(chuàng)建了一個(gè)分組的桶"terms": {"field": "tags.verbatim"},"aggs": {"to-events": { ? ? ? ? ? ? ? ? ? ? ? ? ?# to-events為每個(gè)標(biāo)簽中的分組創(chuàng)建了一個(gè)活動(dòng)的桶"children": {"type": "event"},"aggs": {"frequent-attendees": { ? ? ? ? ? ? # frequent-attendees 統(tǒng)計(jì)了每個(gè)參與者的參與活動(dòng)數(shù)"terms": {"field": "attendees"}}}}}}} }'

五、反規(guī)范化

1. 反規(guī)范化使用案例

? ? ? ? 反規(guī)范化利用數(shù)據(jù)冗余,以空間換時(shí)間,查詢時(shí)沒有必要連接不同的文檔。在分布式系統(tǒng)中這一點(diǎn)尤為重要,因?yàn)榭邕^網(wǎng)絡(luò)來連接多個(gè)文檔引入了很大的延時(shí)。ES中的反規(guī)范化主要用于處理多對(duì)多關(guān)系。與嵌套、父子的一對(duì)多實(shí)現(xiàn)不同,ES無法承諾讓多對(duì)多關(guān)系保持在一個(gè)節(jié)點(diǎn)內(nèi)。如圖7所示,一個(gè)單獨(dú)的關(guān)系可能會(huì)延伸到整個(gè)數(shù)據(jù)集。這種操作可能會(huì)非常昂貴,跨網(wǎng)絡(luò)的連接無法避免。

圖7 多對(duì)多關(guān)系會(huì)包含大量的數(shù)據(jù),使得本地連接成為不可能

?

? ? ? ? 圖8展示了反規(guī)范化后,分組與會(huì)員之間的多對(duì)多關(guān)系。它將多對(duì)多關(guān)系的一端反規(guī)范化為許多一對(duì)多關(guān)系。

圖8 多對(duì)多關(guān)系反規(guī)范化為多個(gè)一對(duì)多關(guān)系,讓本地連接成為可能

?

2. 索引、更新和刪除反規(guī)范化的數(shù)據(jù)

(1)反規(guī)范化哪個(gè)方向
? ? ? ? 是將會(huì)員復(fù)制為分組的子文檔呢。還是反過來將分組復(fù)制為會(huì)員的子文檔?必須要理解數(shù)據(jù)是如何索引、更新、刪除和查詢的,才能做出選擇。被反規(guī)范化的部分(也就是子文檔)從各方面看都是難以管理的。

  • 會(huì)多次索引這些文檔,某文檔在父輩中每出現(xiàn)一次,就會(huì)被索引一次。
  • 更新時(shí),必須更新這篇文檔的所有實(shí)例。
  • 刪除時(shí),必須刪除所有實(shí)例。
  • 當(dāng)單獨(dú)查詢這些子文檔時(shí),將獲得多個(gè)同樣的內(nèi)容,所以需要在應(yīng)用端移除重復(fù)項(xiàng)。

? ? ? ? 基于這些假設(shè),看上去讓會(huì)員成為分組的子文檔更合理一些。會(huì)員文檔的規(guī)模更小,變動(dòng)沒那么頻繁,查詢頻率也不像分組活動(dòng)那么高。因此,管理復(fù)制后的會(huì)員文檔要容易一些。同理也可應(yīng)用于SQL數(shù)據(jù)庫(kù)的反規(guī)范化。

(2)如何表示一對(duì)多關(guān)系
? ? ? ? 是選擇父子關(guān)系還是嵌套文檔呢?這里,最好按照分組和會(huì)員一起搜索并獲取的頻率來選擇。嵌套查詢比has_parent或has_child查詢性能更佳。但如果會(huì)員更新頻繁,父子結(jié)構(gòu)性能更好,因?yàn)樗鼈兛梢愿髯詥为?dú)更新。

? ? ? ? 對(duì)于本例,假設(shè)一并搜索并獲取分組和會(huì)員是很罕見的行為,而會(huì)員經(jīng)常會(huì)加入或者退出分組,因此選擇父子關(guān)系。

(3)索引
? ? ? ? 下面代碼首先定義了一個(gè)包含分組-會(huì)員父子關(guān)系的新索引,然后添加了兩個(gè)父文檔,并在兩個(gè)分組中分別添加了同一個(gè)子文檔。

curl -X PUT "172.16.1.127:9200/my_index?pretty" -H 'Content-Type: application/json' -d' {"mappings": {"_doc": {"properties": {"my_join_field": {?"type": "join","relations": {"group": "member"?}}}}} }'curl -X PUT "172.16.1.127:9200/my_index/_doc/1?refresh&pretty" -H 'Content-Type: application/json' -d' {"my_join_field": {"name": "group"} }'curl -X PUT "172.16.1.127:9200/my_index/_doc/2?refresh&pretty" -H 'Content-Type: application/json' -d' {"my_join_field": {"name": "group"} }'curl -X PUT "172.16.1.127:9200/my_index/_doc/3?routing=1&refresh&pretty" -H 'Content-Type: application/json' -d' {"first_name": "Matthew","last_name": "Hinman","my_join_field": {"name": "member","parent": "1"} }'curl -X PUT "172.16.1.127:9200/my_index/_doc/3?routing=2&refresh&pretty" -H 'Content-Type: application/json' -d' {"first_name": "Matthew","last_name": "Hinman","my_join_field": {"name": "member","parent": "2"} }'

(4)更新
? ? ? ? 下面代碼將搜索_id為3的全部文檔,并將其更名為L(zhǎng)ee。為同一會(huì)員使用同樣的_id,對(duì)于會(huì)員所屬的分組每組使用一次。這樣通過會(huì)員的ID,快速并可靠地檢索某位會(huì)員的全部實(shí)例。

curl '172.16.1.127:9200/my_index/_doc/_search?pretty' -H 'Content-Type: application/json' -d' {"_source": ["my_join_field.parent" ? ? ? ? ? ? ? ? ? ? ?# 只需要每篇文檔的parent字段,就能知道如何進(jìn)行更新了],"query": {"bool": {"filter": {"term": {"_id": 3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 搜索擁有同樣ID的所有會(huì)員,這將返回此人的全部復(fù)制}}}} }'curl -X POST "172.16.1.127:9200/my_index/_doc/3/_update?routing=1&pretty" -H 'Content-Type: application/json' -d' {"doc": {"first_name": "Lee"} }'curl -X POST "172.16.1.127:9200/my_index/_doc/3/_update?routing=2&pretty" -H 'Content-Type: application/json' -d' {"doc": {"first_name": "Lee"} }'

(5)刪除

curl -X DELETE '172.16.1.127:9200/my_index/_doc/3?routing=1&pretty' curl -X DELETE '172.16.1.127:9200/my_index/_doc/3?routing=2&pretty'

3. 查詢反規(guī)范化的數(shù)據(jù)

? ? ? ? 下面的代碼首先索引兩個(gè)會(huì)員,然后在搜索的時(shí)候,將同時(shí)獲得兩者。

curl -X PUT "172.16.1.127:9200/my_index/_doc/4?routing=1&refresh&pretty" -H 'Content-Type: application/json' -d' {"first_name": "Radu","last_name": "Gheorghe","my_join_field": {"name": "member","parent": "1"} }'curl -X PUT "172.16.1.127:9200/my_index/_doc/4?routing=2&refresh&pretty" -H 'Content-Type: application/json' -d' {"first_name": "Radu","last_name": "Gheorghe","my_join_field": {"name": "member","parent": "2"} }'curl -X POST "172.16.1.127:9200/my_index/_refresh?pretty"curl '172.16.1.127:9200/my_index/_doc/_search?pretty' -H 'Content-Type: application/json' -d' {"query": {"term": {"first_name": "radu"}} }'

? ? ? ? 對(duì)于多數(shù)索引和聚合,一種變通的方式是在獨(dú)立的索引中維護(hù)所有會(huì)員的副本。

總結(jié)

以上是生活随笔為你收集整理的触类旁通Elasticsearch:关联的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

黄色毛片一级 | 国产亚洲精品中文字幕 | 激情久久五月 | 国产一级二级av | 2020天天干夜夜爽 | 久久久免费观看视频 | 国产精品视屏 | 亚州欧美精品 | 日韩欧美一区二区在线观看 | 国产精品美女久久久久久网站 | 亚洲国产精品久久久 | 久久在线| av一级片| 国产一区二区三区高清播放 | 五月丁色 | 日韩欧美在线观看 | 欧美性生活久久 | 久草在线费播放视频 | 欧美va电影 | 国产中文字幕91 | 国产一区二区视频在线播放 | 国产福利91精品 | 欧美一区中文字幕 | 免费高清男女打扑克视频 | 在线电影a | 国产精品va在线播放 | 亚洲人成免费网站 | 久久精品中文字幕一区二区三区 | 91电影福利 | 狠狠色狠狠色合久久伊人 | 久久免费公开视频 | 五月激情丁香 | 亚洲午夜小视频 | 久久久久久影视 | 国产精品一区久久久久 | 亚洲黑丝少妇 | 久久国产精品久久国产精品 | 天天干天天射天天爽 | 黄色成人免费电影 | 在线观看黄a | 免费人成在线观看网站 | 中文字幕色播 | av观看在线观看 | 免费在线黄网 | 日韩久久久久久久久 | 久久精品美女视频网站 | av一级片| 国产美女精品 | 日韩精品一区二 | 人人草人人草 | 天天干天天干 | 国精产品999国精产品视频 | 麻豆传媒视频在线免费观看 | 欧美激情视频久久 | 999超碰| 欧美a级成人淫片免费看 | 色婷婷激情网 | 日韩免费不卡av | 免费观看的黄色片 | 日韩电影在线一区二区 | 国产精品美女免费视频 | 人人要人人澡人人爽人人dvd | 在线国产中文字幕 | www.狠狠操.com| 国产中文字幕91 | 欧美精品久久久久久久久久丰满 | 91传媒在线| 亚洲乱亚洲乱亚洲 | 日本aaaa级毛片在线看 | 成人夜晚看av | 色综合天天综合 | 探花视频在线版播放免费观看 | 一区 在线 影院 | 久久艹欧美 | 免费观看完整版无人区 | 丁香六月色 | 国产成人精品久久二区二区 | 国产尤物在线 | 免费观看91视频大全 | 国产青青青| 国产成人精品久久久 | 欧美一级免费在线 | 97在线视频免费看 | 国色天香av | 亚洲丝袜中文 | 欧美国产视频在线 | 天天超碰 | 免费国产在线精品 | 成 人 黄 色 免费播放 | 国产精品xxxx18a99 | 久久久久久久久久影视 | 欧美小视频在线 | 亚洲午夜在线视频 | 中文字幕二区在线观看 | 2020天天干天天操 | 国产成年人av| 欧美日韩成人一区 | 国产亚洲免费观看 | 国产拍在线 | 免费看成人av | 人人澡人人爱 | 四虎成人免费影院 | 97天堂网| 国产精品久久网 | 在线观看日韩中文字幕 | 日韩精品一二三 | 少妇bbbb搡bbbb搡bbbb | 美女视频黄的免费的 | 亚洲精品视频在线观看免费 | 国产男男gay做爰 | 日韩理论电影在线观看 | 欧美久久久久久久久久久久久 | 国产精品嫩草69影院 | 久久久久国产精品免费网站 | 日韩精品在线看 | 在线观看av网 | 午夜婷婷在线观看 | 免费在线一区二区三区 | 欧美另类高清 | av一区在线| 精品国产理论片 | 精品国产伦一区二区三区观看方式 | 欧美日韩在线网站 | 国产韩国精品一区二区三区 | 中文字幕一区二 | 99夜色 | 免费亚洲精品视频 | av免费看看 | 国产91免费看 | 亚洲涩涩网 | 99久久精品费精品 | 国产九色在线播放九色 | 丝袜精品视频 | 欧美在线视频一区二区 | 日韩精品观看 | 欧美日韩在线视频观看 | 在线a人片免费观看视频 | 精品国产一区二区在线 | 免费视频久久 | 日韩精品久久中文字幕 | 免费黄色在线网站 | 伊人网站| 高清中文字幕 | 日韩在线免费视频 | 99精品系列 | 亚洲国产一区在线观看 | 国产原厂视频在线观看 | 日韩美女高潮 | 免费在线观看av网站 | 成人影音av | 亚洲国产精品电影 | 国产99久久99热这里精品5 | 97电影手机 | 香蕉久草在线 | 国产成人av电影在线 | 99免费观看视频 | 九九精品久久 | 国产精品一区欧美 | 国产精品一区二区av影院萌芽 | 色综合久久久久网 | 99精品国产免费久久久久久下载 | 成人a级免费视频 | 成年人免费av | 欧美日韩三区二区 | 国产裸体视频bbbbb | 91网在线| 国产中文字幕精品 | 成人av免费电影 | 在线观看黄色免费视频 | 91.dizhi永久地址最新 | 国产在线传媒 | 国产美女在线观看 | 久久久久久久久久久电影 | 国产天天爽 | 日日夜夜精品视频天天综合网 | 色婷婷av一区 | 久久免费一级片 | 国产精品地址 | 日日摸日日碰 | 亚洲精品观看 | 国产69久久 | 国产h在线播放 | 在线播放 日韩专区 | 国产成人精品一区二区三区在线观看 | 十八岁免进欧美 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 免费观看性生交大片3 | av在线小说| 91精品办公室少妇高潮对白 | 久久久黄色| 在线一二区 | 久久99精品国产91久久来源 | 久久久国产影院 | 一级做a爱片性色毛片www | 国产一区二区三区在线 | 国产亚洲精品bv在线观看 | 中文av免费 | 婷久久| 69av视频在线观看 | 日韩精品专区 | 在线视频1卡二卡三卡 | 精品国产aⅴ一区二区三区 在线直播av | 国产精品99久久久久久人免费 | 久久99网| 在线电影 一区 | 婷婷综合五月天 | 国产婷婷vvvv激情久 | 高清一区二区三区av | 五月天天色 | 亚洲第一区在线观看 | 久香蕉| 日韩v在线91成人自拍 | 91精品视频免费 | 91av官网 | 一区二区三区四区五区六区 | www.av在线播放 | www激情com| 视频一区二区在线 | 亚洲精品久久久久久中文传媒 | 国产成人精品一区二区三区在线观看 | 人人插人人 | 九九久久久久久久久激情 | aⅴ精品av导航 | 香蕉视频在线免费看 | 国产亚洲精品久久久久久移动网络 | 欧美精品久久天天躁 | 久久久精选 | 亚洲天天 | 日韩高清国产精品 | 成人在线视频论坛 | 久久av电影| 蜜臀久久99精品久久久酒店新书 | 成人欧美日韩国产 | 久久久激情视频 | 免费观看www小视频的软件 | 日韩精品免费在线播放 | www.伊人网| 首页国产精品 | 天堂v中文 | 日韩精品一区在线播放 | 亚洲精品在线一区二区三区 | 97夜夜澡人人爽人人免费 | 天天射天天爽 | 亚洲 欧美变态 另类 综合 | 国产不卡一二三区 | 97视频免费观看2区 亚洲视屏 | www.夜色.com| 久久久久久网站 | 91九色porn在线资源 | 九九欧美 | 国产美女视频免费观看的网站 | 韩国精品福利一区二区三区 | 综合久久五月天 | 天天做日日爱夜夜爽 | 五月婷婷狠狠 | sm免费xx网站 | 成人蜜桃| 黄色免费网站 | 精品国产综合区久久久久久 | 人人讲 | 五月婷网站 | 乱子伦av| 五月天电影免费在线观看一区 | 人人看人人爱 | 免费在线一区二区 | 午夜国产一区二区 | 五月婷婷激情五月 | www免费看片com | 一区中文字幕在线观看 | 九九九九精品九九九九 | 国产又粗又猛又黄 | 天天操天天摸天天爽 | 精品久久免费 | 天天色天天干天天色 | 丁香九月婷婷综合 | av免费网页 | 免费黄a | 久久激情精品 | 超碰在线网 | 狠狠的操狠狠的干 | 伊人成人精品 | www.色五月.com | 欧美一二三视频 | 日日操操操 | 手机av在线免费观看 | 中文字幕av最新更新 | 国产精品一区二区三区免费看 | 国产精品免费观看国产网曝瓜 | 天天干夜夜夜 | 国产99久久久国产 | 日韩av在线一区二区 | 国产不卡av在线 | 国产精品1区2区在线观看 | 五月天六月婷婷 | 国产精品手机在线 | 一区二区精品在线观看 | 麻豆极品 | 久久久久久久久久网 | 国产在线不卡视频 | 伊色综合久久之综合久久 | 免费情缘 | 成人黄色在线播放 | 欧美高清成人 | 国内精品在线观看视频 | 天天操天天爱天天爽 | av高清在线观看 | 精品国产一区二区三区久久久 | 亚洲第一区在线观看 | 国产韩国日本高清视频 | 亚洲影院国产 | 亚洲涩涩涩涩涩涩 | 99精品偷拍视频一区二区三区 | 久久视频中文字幕 | 偷拍福利视频一区二区三区 | 免费在线观看一区二区三区 | 久久久久免费精品 | 特级毛片在线免费观看 | 在线观看精品 | 久久不卡免费视频 | 成年美女黄网站色大片免费看 | 欧美日韩一区二区视频在线观看 | 91在线播放国产 | 国产成人精品久久久久蜜臀 | 天天色天天艹 | 永久免费毛片在线观看 | 亚洲第一av在线 | 久久精品精品 | 日日干狠狠操 | 在线亚州 | 午夜日b视频 | a天堂免费| 国产精品久久久久久久久搜平片 | 亚洲乱码久久久 | 伊人狠狠| 天堂va欧美va亚洲va老司机 | 久久国内精品99久久6app | 国产精品欧美久久久久三级 | 日韩精品在线观看av | 日韩素人在线观看 | 亚洲精品在线观看免费 | 色网站中文字幕 | av在线精品| 99爱精品在线| 亚洲视频 中文字幕 | 日日爱999| 国产一级片免费播放 | 国产不卡在线视频 | 高清视频一区二区三区 | 国产又粗又猛又爽 | av免费在线观看网站 | 欧美性性网| 国产精品久久中文字幕 | 色综合天天视频在线观看 | 免费看的黄色录像 | 在线看片91 | 国产午夜三级一区二区三 | 天天色综合1 | 色九九视频 | 91精品在线免费观看 | 成人影音在线 | 久草热久草视频 | 国产激情小视频在线观看 | 国产午夜麻豆影院在线观看 | 日韩国产精品久久 | 天天操天天操 | 黄a网| 97超碰资源网 | 免费福利视频导航 | 99视频在线免费看 | 日日爱999 | 99在线免费视频 | 五月婷在线 | 精品黄色片| 四虎国产免费 | 精品国产一区二区三区四区在线观看 | 一区二区三区精品久久久 | 婷婷免费在线视频 | 亚洲性少妇性猛交wwww乱大交 | 国产精选视频 | 国产成人av一区二区三区在线观看 | 国产精品麻豆果冻传媒在线播放 | 国内精品久久久久久久影视简单 | 欧美福利视频一区 | 深夜免费小视频 | 久久亚洲免费 | 久久好看免费视频 | 国产小视频免费观看 | 国产91丝袜在线播放动漫 | 一区二区三区免费在线观看视频 | 久草在线播放视频 | 人人爽人人片 | 久久综合亚洲鲁鲁五月久久 | 在线看片成人 | 区一区二区三区中文字幕 | 天天色天天综合网 | 国产精品久久 | 日韩特黄一级欧美毛片特黄 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 久久国产成人午夜av影院宅 | 99热国产精品 | 中文字幕在线一二 | 中文字幕资源网 国产 | 91免费观看国产 | 国产视频91在线 | 国产麻豆电影在线观看 | 日韩videos高潮hd | 91精品视频免费观看 | 中文一二区 | 中文字幕视频播放 | 三级小视频在线观看 | 婷久久 | 香蕉视频网站在线观看 | 日韩最新中文字幕 | 午夜美女网站 | 亚洲免费专区 | 中文字幕日韩一区二区三区不卡 | 91探花视频| 天天玩天天操天天射 | 2021国产精品 | 97精品国产 | 亚州av免费 | 亚洲 欧美 日韩 综合 | 亚洲午夜精品一区二区三区电影院 | 久久免费福利 | 天天射色综合 | 国外调教视频网站 | 国产精品嫩草55av | 国产在线观看av | 女人18片毛片90分钟 | 天天爱av导航 | 狠狠色丁香久久婷婷综合丁香 | 色丁香婷婷 | 一区二区三区四区影院 | 五月天视频网站 | 欧美一级片免费播放 | 五月婷亚洲| 黄色精品网站 | 色综合天天 | 人人玩人人添人人澡97 | 爱爱av在线| 亚洲精品成人av在线 | 中文字幕人成乱码在线观看 | 五月天综合网站 | 免费高清无人区完整版 | 久操97| 欧美精品xxx| 在线免费中文字幕 | 久久精品免费观看 | 97在线看 | 国产爽妇网 | 国产精品成人a免费观看 | 91av手机在线观看 | 2019国产精品| 成年人免费电影在线观看 | 99精品国产99久久久久久97 | 日韩精品在线看 | www视频在线观看 | 国产黄免费在线观看 | 在线观看色视频 | 久久艹免费 | 日本中文字幕在线播放 | 午夜久久美女 | 99久久99 | 日韩美av在线 | 日本久久久精品视频 | 日本xxxx裸体xxxx17 | 国产精品久久久久永久免费 | 国产日产精品一区二区三区四区的观看方式 | 久艹在线观看视频 | 亚洲免费国产视频 | 五月天婷婷免费视频 | 午夜精品一区二区三区四区 | 韩国av免费观看 | 天天操天天弄 | 免费观看成人网 | 丝袜美腿亚洲综合 | 日本aa在线 | 天天干人人干 | 久久黄色网址 | 精品影院| 欧美色图另类 | 国产特级毛片aaaaaaa高清 | 西西444www大胆无视频 | 草免费视频 | 免费在线观看成年人视频 | www.神马久久 | 99热官网 | 中文字幕在线免费97 | 日韩欧美电影网 | 国产免费久久精品 | 日批在线观看 | 伊人网站 | 亚洲人人精品 | 韩日电影在线 | 制服丝袜一区二区 | 99精品视频播放 | www.香蕉视频在线观看 | 毛片一区二区 | 久久99精品波多结衣一区 | 欧美最猛性xxxxx(亚洲精品) | 在线а√天堂中文官网 | va视频在线 | 97人人射| 久久午夜影院 | 亚洲dvd | 欧美一级片在线观看视频 | 天天摸夜夜添 | 久久久久久久久久久国产精品 | 91视频免费网站 | 亚洲成av人影片在线观看 | 精品久久久久久久 | 精品久久久久久亚洲综合网 | 亚洲视频在线免费看 | 91成年视频| 久久亚洲成人网 | 日韩午夜视频在线观看 | 国产精品va在线观看入 | 久久国产剧场电影 | 三级黄色欧美 | 中文字幕av免费在线观看 | 超薄丝袜一二三区 | 一区二区久久久久 | 日韩 在线a | 日韩精品视频网站 | 伊人久久一区 | 五月激情婷婷丁香 | 国产在线一线 | 精品美女在线观看 | www.夜夜操.com | 婷婷在线免费 | 精品一区二区久久久久久久网站 | 五月婷香蕉久色在线看 | 久久国产热 | 四虎影视成人永久免费观看亚洲欧美 | 天天色图| 国产福利电影网址 | 国产精品麻豆91 | av手机版| 91福利社区在线观看 | 99久久婷婷国产一区二区三区 | 91在线看网站 | www好男人| 九色精品免费永久在线 | 亚洲伊人第一页 | 激情久久综合 | 人人讲下载 | 美女福利视频在线 | 中文字幕超清在线免费 | 亚洲欧美国产精品 | 91麻豆精品国产91久久久久久 | 在线观看一区二区精品 | 免费看污黄网站 | 操操综合 | 奇米影视777影音先锋 | 最近中文字幕高清字幕免费mv | 成人h动漫在线看 | 免费欧美| 国产99在线免费 | 久久精品5 | 一区av在线播放 | 在线观看一级视频 | av免费电影在线观看 | 天天色天天射天天干 | 色视频在线 | 国产中文字幕在线免费观看 | 亚洲精品一区二区网址 | 国产精品久久久区三区天天噜 | www.香蕉视频 | 国产精品男女 | 精品一区二区三区久久 | 色婷婷精品大在线视频 | 国产日韩欧美在线播放 | 久草香蕉在线视频 | 国产日本在线播放 | 77国产精品 | 日本中文一级片 | 国产在线a不卡 | 日韩精品影视 | 天堂在线免费视频 | 全黄网站 | 久久免费成人 | 91视频一8mav | 在线观看完整版免费 | 一区二区三区视频在线 | 日韩欧美一区二区三区在线 | 日韩手机在线 | 在线 视频 一区二区 | 久久久久国产a免费观看rela | 久久成人精品电影 | 中文字幕在线观看免费高清电影 | 欧美大码xxxx| 亚洲欧美偷拍另类 | 欧美影片 | 久久综合亚洲鲁鲁五月久久 | 黄色午夜| 中文字幕黄色网 | 欧美日韩精品久久久 | 在线观看黄 | 日本精品久久久一区二区三区 | 国产69久久久 | 久久男人免费视频 | 麻豆影视在线播放 | av在线电影网站 | 久久不射电影院 | 少妇自拍av | 色狠狠综合天天综合综合 | 99c视频高清免费观看 | 精品视频在线免费观看 | 色综合天天狠狠 | 中文字幕有码在线 | 天天摸日日摸人人看 | 夜色.com | 国产欧美在线一区二区三区 | 成年人在线 | 久久国产成人午夜av影院宅 | 精品国产aⅴ麻豆 | 免费黄色小网站 | 欧美片网站yy | 一色屋精品视频在线观看 | 五月天婷亚洲天综合网精品偷 | 91色在线观看视频 | 国产又粗又长又硬免费视频 | 日韩欧美在线视频一区二区 | 美女视频黄免费 | 色婷婷狠狠五月综合天色拍 | 婷婷激情站 | 日本久久久亚洲精品 | 国产一级片网站 | av成人免费网站 | 久草在在线视频 | 免费视频91蜜桃 | 免费在线观看av网址 | 日韩在线观看视频中文字幕 | 欧美日韩免费在线观看视频 | 亚洲一区二区精品 | 免费在线国产精品 | 色噜噜在线观看 | 免费成人结看片 | 99精品免费网 | 91色在线观看 | 午夜视频在线网站 | 亚洲视频在线观看免费 | 中文 一区二区 | 亚洲成av人片一区二区梦乃 | 久久福利剧场 | 91网在线| 中文字幕色网站 | 97视频免费播放 | 久久69精品久久久久久久电影好 | 久久久久久久久久久影视 | 亚洲精品乱码久久久久久按摩 | 伊人影院99 | 成人午夜毛片 | 久久精品老司机 | 麻豆 videos| 狠狠插狠狠干 | 中文永久免费观看 | 中文字幕在线国产 | 国产免费又黄又爽 | 欧美日韩在线精品 | 国产欧美中文字幕 | 久久国产一二区 | 91成人精品在线 | 五月婷在线视频 | 91在线麻豆 | 中文字幕高清视频 | 日韩丝袜视频 | 日韩久久久久久 | 美女视频一区 | 99久久综合精品五月天 | 日韩精品视频免费看 | 美女免费黄网站 | 一级淫片a | 日韩乱色精品一区二区 | 黄色小网站在线 | 久久久精品欧美 | 国产色网站 | 69国产盗摄一区二区三区五区 | 91亚洲精品国产 | 国产精品大片免费观看 | 亚洲日韩欧美一区二区在线 | 成人h电影在线观看 | 国产精品mm | 美女视频黄频大全免费 | 久久久久国产精品一区二区 | 国产精品国产三级在线专区 | 国产视频 亚洲精品 | 欧美一二区在线 | 婷婷在线色 | 国产在线视频在线观看 | 91女人18片女毛片60分钟 | 久久久久久国产一区二区三区 | 毛片网站免费在线观看 | 国产精品一区二区免费在线观看 | 91污污视频在线观看 | 麻豆视频在线观看免费 | 色美女在线 | 中文字幕在线日 | 国产一级片视频 | 在线观看国产永久免费视频 | 日韩久久久久久 | 欧美综合国产 | 久久的色 | 国产日本在线播放 | 国产伦精品一区二区三区无广告 | 色婷婷久久久 | 操久久网| 中文字幕色婷婷在线视频 | 国产在线a不卡 | 天天干天天射天天操 | 欧美久久久久久久久 | 欧美亚洲xxx | 一级黄色a视频 | 国产日本亚洲高清 | 日韩一区视频在线 | 日一日干一干 | 香蕉久草| 久久99国产精品 | 国产黄色片免费观看 | av免费黄色 | 免费色视频网站 | 国产精品久久久精品 | 成人a在线观看高清电影 | 最新国产精品亚洲 | 国内丰满少妇猛烈精品播 | 99久久99久久精品国产片果冰 | 免费色视频网址 | 日韩成人精品一区二区三区 | 日韩小视频 | 久精品一区 | 国产一区在线免费观看 | 在线中文字幕av观看 | 在线观看亚洲国产 | 亚洲春色奇米影视 | 免费看污污视频的网站 | 五月婷婷激情五月 | 国产精品成人在线观看 | 亚洲区另类春色综合小说 | 99精品系列 | 久久无码av一区二区三区电影网 | 免费的国产精品 | 久久99久久99精品免观看粉嫩 | 免费网站在线观看成人 | 久久综合久久综合这里只有精品 | 亚洲伦理电影在线 | 日韩美女一级片 | 亚洲 欧美日韩 国产 中文 | 久久久久亚洲国产 | 久久成人综合 | 色久av| 成人在线观看资源 | 天天射射天天 | 久久免费资源 | 欧美精品亚洲精品日韩精品 | 国产日产精品一区二区三区四区的观看方式 | 在线观看中文字幕网站 | 午夜av日韩 | a爱爱视频| av中文字幕免费在线观看 | 超碰在线亚洲 | 在线观看网站你懂的 | 日韩一级电影在线观看 | 亚洲黄色在线播放 | 免费看污片 | 日韩三级免费 | 久草网站在线 | 国产精品视频免费看 | 成人av资源网 | 久久久久久久久久久高潮一区二区 | 9999在线视频 | www亚洲精品 | 色综合久久天天 | 久久精品一区二区三区四区 | 亚洲电影久久久 | 麻豆免费观看视频 | 精品国产人成亚洲区 | 国产精品免费视频久久久 | 在线免费观看国产视频 | 五月婷婷中文网 | 黄色在线免费观看网站 | 午夜久久影院 | 精品久久国产精品 | 天天弄天天操 | 在线视频你懂得 | 精品在线观看国产 | 国产精品夜夜夜一区二区三区尤 | 973理论片235影院9 | 2021久久 | 日韩在线首页 | 成人一区二区在线观看 | 天天色天天射天天综合网 | 91尤物在线播放 | 国产精品成久久久久三级 | 欧美国产一区在线 | 亚洲电影一级黄 | 久久精品视频在线观看 | 亚洲综合色av | 国内精品小视频 | 香蕉网在线 | 婷婷综合在线 | 久99久精品视频免费观看 | 久久福利 | 亚洲干视频在线观看 | 免费网站在线观看成人 | 日韩中文幕| 日韩一区二区三 | 久久久久免费精品国产小说色大师 | 色视频在线免费 | 久久99国产综合精品 | 久久99精品久久久久久久久久久久 | 在线视频专区 | 国产精品美女久久久久久久 | 九九精品久久 | 91av短视频 | 99精品视频在线看 | 国产经典 欧美精品 | av不卡网站 | 91完整版观看 | 最新午夜电影 | 久久高清视频免费 | 成人a免费看| 亚洲黄色av | 欧美极品少妇xxxx | 中文字幕在线一区观看 | 午夜精品福利一区二区 | 国产精品自产拍在线观看网站 | 黄色毛片在线 | 亚洲黄污| 在线精品视频免费播放 | 亚洲国产精品电影 | 免费看av片网站 | 天天干天天射天天操 | 精品一区二区三区久久久 | 日韩久久久久久久久久 | 97超碰免费 | 国产手机精品视频 | 国产色a在线观看 | 国产高清在线视频 | 天天色天天射综合网 | 亚洲爽爽网 | 91麻豆精品国产91久久久使用方法 | 天天射天天操天天 | 久久久精品99| 黄色成人小视频 | 天天操夜夜操 | 日韩精品视频在线免费观看 | 99视频在线免费看 | 亚洲自拍偷拍色图 | www激情久久 | av资源网在线播放 | 国产精品久久久久久久av大片 | 永久免费的啪啪网站免费观看浪潮 | 天天干com | 国产一区二区三区在线免费观看 | 天天舔夜夜操 | 欧美日韩免费看 | 在线精品视频免费观看 | 成年人在线电影 | 欧美aa一级 | 国产高清中文字幕 | 六月色丁香 | 久久精品一区二区三区国产主播 | 91一区一区三区 | 国产在线观看xxx | 久久精品久久久久 | 91经典在线| 欧美另类xxxxx | 狠狠干网 | 91中文字幕 | 久久久久激情 | 五月色婷| 久久亚洲综合国产精品99麻豆的功能介绍 | 午夜精品久久久久久99热明星 | 观看免费av | 99免费看片 | 干狠狠| 欧美男男tv网站 | 精品国产一区二区三区在线观看 | 丁香 婷婷 激情 | 国内精品福利视频 | 国产婷婷在线观看 | 久久久久日本精品一区二区三区 | 久久男女视频 | 欧美成人黄色片 | 国产一级免费观看 | 久久久国产视频 | 日韩理论电影在线观看 | 九九电影在线 | 日本精品久久久久中文字幕5 | 99精品在线视频播放 | 二区三区视频 | 麻豆久久久 | 欧美亚洲国产一卡 | 韩日电影在线免费看 | 天天操天天色天天射 | 国产99在线 | 国产精品s色 | 97在线免费 | 亚洲一区二区天堂 | 久久综合九色综合97婷婷女人 | 国产一级91| 毛片二区 | 精品1区2区3区 | 色99之美女主播在线视频 | 国产精品第7页 | 97色狠狠| 九九久久久久久久久激情 | 亚洲最新视频在线播放 | 国产成人av在线 | 国产精品视频永久免费播放 | 4438全国亚洲精品观看视频 | 91麻豆文化传媒在线观看 | 久久国产精品99精国产 | 日韩黄色软件 | 91成人免费观看视频 | 成人久久久久久久久久 | 亚洲激情一区二区三区 | 在线播放一区 | 国际精品久久久久 | 中文字幕精品一区二区三区电影 | 午夜精品一区二区三区免费 | 日本黄色一级电影 | 久久国产经典 | 亚洲欧美成人在线 | aaa黄色毛片| 天天色天天射天天干 | 久久久久日本精品一区二区三区 | 国产精品伦一区二区三区视频 | 综合精品久久久 | 黄色电影在线免费观看 | 97在线资源 | 日本中文字幕一二区观 | 三级av在线| 久久精品99久久久久久2456 | 高清av免费观看 | 夜夜看av| 欧美日韩高清一区二区三区 | 国产二区精品 | 婷婷色吧 | 国产一区二区观看 | 欧美一级日韩免费不卡 | 青青久草在线 | 中文字幕五区 | 久久久亚洲国产精品麻豆综合天堂 | 亚洲精品国产欧美在线观看 | 成人免费av电影 | 视频在线一区二区三区 | 国产精品毛片完整版 | 色就是色综合 | 中文字幕一区二区三区精华液 | 免费亚洲精品 | 欧美最猛性xxxxx亚洲精品 | 在线观看视频在线 | 国产资源网 | 一级做a视频| 九九热在线免费观看 | 成人黄色毛片视频 | av在线看片 | 夜夜骑天天操 | 国产精品第一页在线 | 久久av不卡 | 日韩三级在线 | 91久久精| 国产精品欧美久久久久久 | 日韩中文字幕视频在线 | 在线一二区 | 精品国产自在精品国产精野外直播 | 91成人区 | 91精品久久香蕉国产线看观看 | 黄色小说网站在线 | 国产99久久久精品 | 国产九九在线 | 天天操天天干天天插 | 中文字幕av免费观看 | 有码中文字幕在线观看 | 特级毛片网站 | 国产精品婷婷 | 精品国产免费久久 | 久久精品一二区 | 午夜视频一区二区三区 | 91精品国自产在线偷拍蜜桃 | 人人干免费 | 免费精品 | 91av视频在线观看免费 | 久久在线视频在线 | 国产亚洲综合性久久久影院 | 能在线观看的日韩av | 国内精品久久久久久久久久清纯 | 五月天色丁香 | 国产五十路毛片 | 国产在线专区 | 欧美日韩一区二区三区在线观看视频 | 热久久视久久精品18亚洲精品 | 超碰人在线 | 中文字幕高清在线播放 | 天天操天天射天天添 | 成人小视频在线 | 国产精品18久久久久久久久 |