99久久久久久久久96久久,青青操在线视频免费播放,亚洲黄色天堂视频网,91国产原创精品人妻,2020亚洲欧美国产日韩,亚洲三级免费观看网址,免费女人高潮又粗肛交毛片,啊啊啊嗯呢啊啊啊官网首页,免费av三级在线观看

聯(lián)系我們 - 廣告服務(wù) - 聯(lián)系電話:
您的當前位置: > 關(guān)注 > > 正文

解析ElasticSearch ElasticSearch字段類型解析

來源:CSDN 時間:2023-04-03 10:48:11

ElasticSearch

一、字段的類型Field type的詳解


(資料圖片僅供參考)

下面就是所有的字段類型

字符串類型text,keyword整數(shù)類型integer,long,short,byte浮點類型double,float,half_float,scaled_float邏輯類型boolean日期類型date范圍類型range二進制類型binary復合類型數(shù)組類型array對象類型object嵌套類型nested地理類型地理坐標類型geo_point地理地圖geo_shape特殊類型IP類型ip范圍類型completion令牌計數(shù)類型token_count附件類型attachment抽取類型percolator

1、字符串類型

1.1、text

會被分詞器解析, 生成倒排索引, 支持模糊、精確查詢, 不用于排序, 很少用于聚合,常用于全文檢索.

1.2、keyword

不進行分詞,直接索引, 支持模糊、精確查詢, 支持聚合。如果需要為結(jié)構(gòu)化內(nèi)容, 比如 id、email、hostnames、狀態(tài)碼、標簽等進行索引,則推薦使用 keyword類型以進行完全匹配. 比如我們需要查詢"已發(fā)貨"的訂單, 標記為"已發(fā)布"的文章等.

ES會對"數(shù)值(numeric)"類型的字段(比如, integer, long)進行優(yōu)化以支持范圍(range)查詢. 但是, 不是所有的數(shù)值類型的數(shù)據(jù)都需要使用"數(shù)值"類型, 比如產(chǎn)品id, 會員id, ISDN(出版社編號), 這些很少會被進行范圍查詢, 通常都是精確匹配(term query).

keyword類型的查詢通常比numeric的要快, 如果不需要范圍查詢, 則建議使用keyword類型.

如果不確定使用哪一種, 可以通過multi-field同時設(shè)置keyword和numeric類型.

2、數(shù)值類型(numeric)

類型說明取值范圍

byte8位有符號整數(shù)-128 ~ 127

short16位有符號整數(shù)-32768 ~ 32767

integer32位有符號整數(shù)-2,147,483,648 ~ 2,147,483,647 即:-2^31 ~ 2^32 - 1

long64位有符號整數(shù)-2^63 ~ 2^63 - 1

float32位單精度IEEE 754浮點類型, 有限值, 24bits2^-149 ~ (2 - 2^-23) · 2^127

double64位雙精度IEEE 754浮點類型, 有限值, 53bits2^-1074 ~ (2 - 2^-52) · 2^1023

half_float16位半精度IEEE 754浮點類型, 有限值, 11bits2^-24 ~ 65504

scaled_float帶有縮放因子scaling_factor的浮點數(shù), 可以當整型看待

2.1、整型

byte, short, integer, long

2.2、浮點型

float, half_float, scaled_float, double 對于上面展示的3種浮點類型(float, half_float, scaled_float)來說, -0.00和+0.00是不同的值,使用term查詢-0.00時不會匹配+0.00, 反之亦然。對于范圍查詢(range query)來說也是如此:如果上邊界是-0.00則無法匹配+0.00,如果下邊界是+0.00則不會匹配-0.00

數(shù)值類型使用的注意事項:

在滿足業(yè)務(wù)需求的情況下, 盡量選擇范圍小的類型, 這與mysql等關(guān)系型數(shù)據(jù)庫的設(shè)計要求是一致的. 字段占用的空間越小, 搜索和索引的效率越高(這個有點廢話, 數(shù)據(jù)量越小肯定越快了).

如果是浮點數(shù), 則也要優(yōu)先考慮使用scaled_float類型。對于scaled_float類型, 在索引時會乘以scaling_factor并四舍五入到最接近的一個long類型的值.

如果我們存儲商品價格只需要精確到分, 兩位小數(shù)點, 把縮放因子設(shè)置為100, 那么浮點價格99.99存儲的是9999.

如果我們要存儲的值是2.34, 而因子是10, 那么會存儲為23, 在查詢/聚合/排序時會表現(xiàn)為這個值是2.3. 如果設(shè)置更大的因子(比如100), 可以提高精度, 但是會增加空間需求.

3、Object類型

JSON文檔天生具有層級關(guān)系: 文檔可能包含內(nèi)部對象, 而這個對象可能本身又包含對象, 就是可以包含嵌套的對象.

4、Date

JSON沒有日期(date)類型, 在ES中date類型可以表現(xiàn)為:

字符串格式的日期, 比如: “2015-01-01”, “2015/01/01 12:10:30”long類型的自 epoch (1970-1-1) 以來的毫秒數(shù)integer類型的自 epoch (1970-1-1) 以來的秒數(shù)(時間戳, timestamp)

在ES內(nèi)部, 日期被轉(zhuǎn)換為UTC格式(如果指定了時區(qū)), 并存儲為long類型的自 epoch (1970-1-1) 以來的毫秒數(shù).

查詢時 , date類型會在內(nèi)部轉(zhuǎn)換為long類型的范圍查詢,聚合和存儲字段的結(jié)果根據(jù)與字段關(guān)聯(lián)的日期格式轉(zhuǎn)換回字符串。

5、ip類型

ip類型的字段只能存儲ipv4或ipv6地址.

二、屬性的詳解

1、fielddata字段數(shù)據(jù)

參考鏈接:https://www.cnblogs.com/rickie/p/11665168.html

默認情況下是false

作用:把不能聚合、排序、通過腳本訪問的字段變?yōu)榭梢跃酆?、排序、通過腳本訪問的字段

text類型是不支持doc_value。所以要想對text類型的字段擁有聚合等功能,只能設(shè)置屬性的fielddata為true即可

缺點:構(gòu)建和管理全部在內(nèi)存,也就是在JVM的內(nèi)存中。這意味著它本質(zhì)上是不可擴展的。

fielddata可能會消耗大量的堆空間,尤其是在加載高基數(shù)(high cardinality)text字段時。一旦fielddata已加載到堆中,它將在該段的生命周期內(nèi)保留。此外,加載fielddata是一個昂貴的過程,可能會導致用戶遇到延遲命中。這就是默認情況下禁用fielddata的原因。

如果需要對 text 類型字段進行排序、聚合、或者從腳本中訪問字段值,則會出現(xiàn)如下異常:

Fielddata is disabled on text fields by default. Set fielddata=true on [your_field_name] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.

但是,在啟動fielddata 設(shè)置之前,需要考慮為什么針對text 類型字段進行排序、聚合、或腳本呢?通常情況下,這是不太合理的。

text字段在索引時,例如New York,這樣的詞會被分詞,會被拆成new、york 2個詞項,這樣當搜索new 或 york時,可以被搜索到。在此字段上面來一個terms的聚合會返回一個new的bucket和一個york的bucket,但是你可能想要的是一個單一new york的bucket。

怎么解決這一問題呢?

你可以使用 text 字段來實現(xiàn)全文本查詢,同時使用一個未分詞的 keyword 字段,且啟用doc_values,來處理聚合操作。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-qlza4utS-1644556258944)(data:image/png;base64,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)]

(1) 使用my_field 字段用于查詢;

(2) 使用my_field.keyword 字段用于聚合、排序、或腳本; 注意:但是我試了試,不行,我也不知道為啥

PUT /user3{"mappings": {"properties": {"name":{"type": "text",        "fields": {"keyword":{"type":"keyword"          }        }      }    }  }}POST /user3/_doc{"name":"hello word 的數(shù)據(jù)結(jié)構(gòu) 你真棒"}GET /user3/_search{"query": {"match": {"name": "hello"    }  },   "aggs":{"testq":{"terms":{"field":"name.keyword"      }    }  }}結(jié)果輸出:{"took" : 1,  "timed_out" : false,  "_shards" : {"total" : 1,    "successful" : 1,    "skipped" : 0,    "failed" : 0  },  "hits" : {"total" : {"value" : 1,      "relation" : "eq"    },    "max_score" : 0.2876821,    "hits" : [      {"_index" : "user3",        "_type" : "_doc",        "_id" : "N_X1n34BgddXgx4111ZC",        "_score" : 0.2876821,        "_source" : {"name" : "hello word 的數(shù)據(jù)結(jié)構(gòu) 你真棒"        }      }    ]  },  "aggregations" : {"testq" : {"doc_count_error_upper_bound" : 0,      "sum_other_doc_count" : 0,      "buckets" : [        {"key" : "hello word 的數(shù)據(jù)結(jié)構(gòu) 你真棒",          "doc_count" : 1        }      ]    }  }}

也可以使用 PUT mapping API 在現(xiàn)有text 字段上啟用 fielddata,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-C0iFF2N6-1644556258949)(data:image/png;base64,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)]

2、doc_value

doc_values

默認情況下,大部分字段是索引的,這樣讓這些字段可被搜索。倒排索引(inverted index)允許查詢請求在詞項列表中查找搜索項(search term),并立即獲得包含該詞項的文檔列表。

倒排索引(inverted index):

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-D0WU7j87-1644556258952)(data:image/png;base64,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)]

如果我們想要獲得所有包含 brown 的文檔的詞的完整列表,我們會創(chuàng)建如下查詢:

GET /my_index/_search{"query" : {"match" : {"body" : "brown"  } }, "aggs" : {"popular_terms": {"terms" : {"field" : "body"   }  } }}

倒排索引是根據(jù)詞項來排序的,所以我們首先在詞項列表中找到 brown,然后掃描所有列,找到包含 brown 的文檔。我們可以快速看到 Doc_1 和 Doc_2 包含 brown 這個 token。

然后,對于聚合部分,我們需要找到 Doc_1 和 Doc_2 里所有唯一的詞項。用倒排索引做這件事情代價很高: 我們會迭代索引里的每個詞項并收集 Doc_1 和 Doc_2 列里面 token。這很慢而且難以擴展:隨著詞項和文檔的數(shù)量增加,執(zhí)行時間也會增加。

Doc values 通過轉(zhuǎn)置兩者間的關(guān)系來解決這個問題。倒排索引將詞項映射到包含它們的文檔,doc values 將文檔映射到它們包含的詞項:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-deqcJ89G-1644556258957)(data:image/png;base64,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)]

當數(shù)據(jù)被轉(zhuǎn)置之后,想要收集到 Doc_1 和 Doc_2 的唯一 token 會非常容易。獲得每個文檔行,獲取所有的詞項,然后求兩個集合的并集。

Doc values 可以使聚合更快、更高效并且內(nèi)存友好。Doc values 的存在是因為倒排索引只對某些操作是高效的。

倒排索引的優(yōu)勢:在于查找包含某個項的文檔,而對于從另外一個方向的相反操作并不高效,即:確定哪些項是否存在單個文檔里,聚合需要這種訪問模式。

在 Elasticsearch 中,Doc Values 就是一種列式存儲結(jié)構(gòu),默認情況下每個字段的 Doc Values 都是激活的,Doc Values 是在索引時創(chuàng)建的。當字段索引時,Elasticsearch 為了能夠快速檢索,會把字段的值加入倒排索引中,同時它也會存儲該字段的 Doc Values。

Elasticsearch 中的 Doc Values 常被應用到以下場景:

對一個字段進行排序?qū)σ粋€字段進行聚合某些過濾,比如地理位置過濾某些與字段相關(guān)的腳本計算

因為文檔值(doc values)被序列化到磁盤,我們可以依靠操作系統(tǒng)的幫助來快速訪問。當 working set 遠小于節(jié)點的可用內(nèi)存,系統(tǒng)會自動將所有的文檔值保存在內(nèi)存中,使得其讀寫十分高速;當其遠大于可用內(nèi)存,操作系統(tǒng)會自動把 Doc Values 加載到系統(tǒng)的頁緩存中,從而避免了 jvm 堆內(nèi)存溢出異常。

因此,搜索和聚合是相互緊密纏繞的。搜索使用倒排索引查找文檔,聚合操作收集和聚合 doc values 里的數(shù)據(jù)。

doc values 支持大部分字段類型,但是text 字段類型不支持(因為analyzed)。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-LgoL0gRs-1644556258959)(data:image/png;base64,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)]

(1) status_code 字段默認啟動 doc_values 屬性;

(2) session_id 顯式設(shè)置 doc_values = false,但是仍然可以被查詢;

如果確信某字段不需要排序或者聚合,或者從腳本中訪問字段值,那么我們可以設(shè)置 doc_values = false,這樣可以節(jié)省磁盤空間。

3、executionHint

1、global ordinals

(1)what’s this?

當我們使用doc values或者fielddata存儲時,在磁盤中存儲的值不是真正的字段值,而是一個字典值(ordinal)。當我們進行聚合查詢的時候,es會把這個字典值跟真正字段值的映射字典加載到內(nèi)存中,并對結(jié)果集做映射,轉(zhuǎn)化為真正的值。這份映射關(guān)系是shard級別的,為這個shard里面是所有segment服務(wù),這也是global的體現(xiàn)。

(2)detail

字典關(guān)系是lazy init的,只有第一次使用的時候才會加載到內(nèi)存中。在es的內(nèi)存表現(xiàn)中提現(xiàn)成fielddata,這也是全keyword的index為什么也會有fielddata使用的原因。只會加載命中的segment的字典不會加載全部。字典關(guān)系在shard被觸發(fā)refresh以后就會失效。下次使用的時候需要再重新構(gòu)建。所以可以提高refresh_interval的值,減少fresh頻率提高字典的生存時間。

2、eager_global_ordinals

(1)what’s this?

當在global ordinals的時候,refresh以后下一次查詢字典就需要重新構(gòu)建,在追求查詢的場景下很影響查詢性能??梢允褂胑ager_global_ordinals,即在每次refresh以后即可更新字典,字典常駐內(nèi)存,減少了查詢的時候構(gòu)建字典的耗時。

(2)使用場景

因為這份字典需要常駐內(nèi)存,并且每次refresh以后就會重構(gòu),所以增大了內(nèi)存以及cpu的消耗。推薦在低寫高查、數(shù)據(jù)量不大的index中使用。

(3)使用

PUT my_index/_mapping{"properties": {"tags": {"type": "keyword",      "eager_global_ordinals": true    }  }}

3、execution_hint

(1)what’ this?

上面介紹了global ordinal的使用場景,是doc_values以及fileddata的默認數(shù)據(jù)架構(gòu)。除了這種模式,還可以選擇map模式。即不再使用字典而是直接把值加載到內(nèi)存中計算,減去了構(gòu)建字典的耗時。當查詢的結(jié)果集很小的情況下,可以使用map的模式不去構(gòu)建字典。使用map還是global_ordinals的取決于構(gòu)建字典的開銷與加載原始字典的開銷。當結(jié)果集大到一定程序,map的內(nèi)存開銷的代價可能抵消了構(gòu)建字典的開銷。

(2)how to use?

GET /_search{"aggs" : {"tags" : {"terms" : {"field" : "tags",                 "execution_hint": "map"              }         }    }}

4、Shard Size

為了提高該聚合的精確度,可以通過shard_size參數(shù)設(shè)置協(xié)調(diào)節(jié)點向各個分片請求的詞根個數(shù),然后在協(xié)調(diào)節(jié)點進行聚合,最后只返回size個詞根給到客戶端,shard_size >= size,如果shard_size設(shè)置小于size,ES會自動將其設(shè)置為size,默認情況下shard_size建議設(shè)置為(1.5 * size + 10)。

三、java實現(xiàn)對Es的curd

//match查詢age是20的條件 QueryBuilders.matchQuery("age",20);  //term查詢age是20的條件 QueryBuilders.termQuery("age",20);  //terms查詢age是20或者200,或者50的條件 QueryBuilders.termsQuery("age",20,200,50);  //query_string全文檢索“xiumu” QueryBuilders.queryStringQuery("xiumu");  //query_string檢索username是“xiumu” QueryBuilders.queryStringQuery("xiumu").field("username");  //multi_match查詢字段username或者description的值是xiumu QueryBuilders.multiMatchQuery("xiumu","username","description");  //range查詢字段age的范圍是在[18-200]之間 QueryBuilders.rangeQuery("age").gte(18).lte(200);  //exits查詢字段age有值 QueryBuilders.existsQuery("age");  //wildcard查詢字段description是以“男人”結(jié)尾的 QueryBuilders.wildcardQuery("description","*男人");  //bool查詢 BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); //bool查詢里添加must多個條件 boolQueryBuilder.must(QueryBuilders.termQuery("age",20)); boolQueryBuilder.must(QueryBuilders.existsQuery("age")); boolQueryBuilder.must(QueryBuilders.wildcardQuery("description","*男人"));

(1)統(tǒng)計某個字段的數(shù)量  ValueCountBuilder vcb=  AggregationBuilders.count("count_uid").field("uid");(2)去重統(tǒng)計某個字段的數(shù)量(有少量誤差) CardinalityBuilder cb= AggregationBuilders.cardinality("distinct_count_uid").field("uid");(3)聚合過濾FilterAggregationBuilder fab= AggregationBuilders.filter("uid_filter").filter(QueryBuilders.queryStringQuery("uid:001"));(4)按某個字段分組TermsBuilder tb=  AggregationBuilders.terms("group_name").field("name");(5)求和SumBuilder  sumBuilder=AggregationBuilders.sum("sum_price").field("price");(6)求平均AvgBuilder ab= AggregationBuilders.avg("avg_price").field("price");(7)求最大值MaxBuilder mb= AggregationBuilders.max("max_price").field("price"); (8)求最小值MinBuilder min=AggregationBuilders.min("min_price").field("price");(9)按日期間隔分組DateHistogramBuilder dhb= AggregationBuilders.dateHistogram("dh").field("date");(10)獲取聚合里面的結(jié)果TopHitsBuilder thb=  AggregationBuilders.topHits("top_result");(11)嵌套的聚合NestedBuilder nb= AggregationBuilders.nested("negsted_path").path("quests");(12)反轉(zhuǎn)嵌套AggregationBuilders.reverseNested("res_negsted").path("kps ");

package com.robin.elasticsearch;import com.alibaba.fastjson.JSON;import com.robin.elasticsearch.common.DataUtil;import com.robin.elasticsearch.entity.User;import com.robin.elasticsearch.entity.User2;import com.robin.elasticsearch.entity.User3;import com.robin.elasticsearch.reponsity.UserMapper;import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;import org.elasticsearch.action.bulk.BulkRequest;import org.elasticsearch.action.bulk.BulkResponse;import org.elasticsearch.action.delete.DeleteRequest;import org.elasticsearch.action.delete.DeleteResponse;import org.elasticsearch.action.get.GetRequest;import org.elasticsearch.action.get.GetResponse;import org.elasticsearch.action.index.IndexRequest;import org.elasticsearch.action.index.IndexResponse;import org.elasticsearch.action.search.SearchRequest;import org.elasticsearch.action.search.SearchResponse;import org.elasticsearch.action.support.master.AcknowledgedResponse;import org.elasticsearch.action.update.UpdateRequest;import org.elasticsearch.action.update.UpdateResponse;import org.elasticsearch.client.RequestOptions;import org.elasticsearch.client.RestHighLevelClient;import org.elasticsearch.client.indices.CreateIndexRequest;import org.elasticsearch.client.indices.CreateIndexResponse;import org.elasticsearch.client.indices.GetIndexRequest;import org.elasticsearch.common.xcontent.XContentType;import org.elasticsearch.index.query.*;import org.elasticsearch.rest.RestStatus;import org.elasticsearch.search.SearchHit;import org.elasticsearch.search.aggregations.Aggregation;import org.elasticsearch.search.aggregations.AggregationBuilders;import org.elasticsearch.search.aggregations.Aggregations;import org.elasticsearch.search.aggregations.BucketOrder;import org.elasticsearch.search.aggregations.bucket.filter.Filters;import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregationBuilder;import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregator;import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramAggregationBuilder;import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;import org.elasticsearch.search.aggregations.bucket.histogram.HistogramAggregationBuilder;import org.elasticsearch.search.aggregations.bucket.range.DateRangeAggregationBuilder;import org.elasticsearch.search.aggregations.bucket.range.IpRangeAggregationBuilder;import org.elasticsearch.search.aggregations.bucket.range.Range;import org.elasticsearch.search.aggregations.bucket.range.RangeAggregationBuilder;import org.elasticsearch.search.aggregations.bucket.terms.Terms;import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;import org.elasticsearch.search.aggregations.metrics.*;import org.elasticsearch.search.builder.SearchSourceBuilder;import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;import org.elasticsearch.search.sort.FieldSortBuilder;import org.elasticsearch.search.sort.SortBuilders;import org.elasticsearch.search.sort.SortOrder;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.data.domain.PageRequest;import org.springframework.data.elasticsearch.core.AggregationsContainer;import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;import org.springframework.data.elasticsearch.core.SearchHits;import org.springframework.data.elasticsearch.core.clients.elasticsearch7.ElasticsearchAggregations;import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Map;@SpringBootTestclass ESTests {@Autowired    UserMapper userMapper;    @Autowired    RestHighLevelClient restHighLevelClient;    @Autowired    private ElasticsearchRestTemplate elasticsearchRestTemplate;    //創(chuàng)建索引    @Test    void createIndex() throws IOException {CreateIndexRequest request = new CreateIndexRequest("zkwz");        CreateIndexResponse exists = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);    }    //刪除索引    @Test    void isExistIndex() throws IOException {GetIndexRequest request = new GetIndexRequest("zkwz");        boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);        System.out.println(exists);    }    //刪除索引    @Test    void deleteIndex() throws IOException {DeleteIndexRequest request = new DeleteIndexRequest("user");        AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);        System.out.println(delete.isAcknowledged());    }    //創(chuàng)建文檔    @Test    void createDoc() throws IOException {IndexRequest request = new IndexRequest("user");        User user = new User("111", "cwx", 23);        IndexRequest source = request.id("123").source(JSON.toJSONString(user), XContentType.JSON);        String id = source.id();        IndexResponse index = restHighLevelClient.index(request, RequestOptions.DEFAULT);        System.out.println(index);    }    //獲取文檔的信息    @Test    void getDocInfo() throws IOException {//創(chuàng)建獲取文檔的請求        GetRequest request = new GetRequest("user", "123");        boolean exists = restHighLevelClient.exists(request, RequestOptions.DEFAULT);        System.out.println(exists);        GetResponse documentFields = restHighLevelClient.get(request, RequestOptions.DEFAULT);        String source = documentFields.getSourceAsString();        System.out.println(source);    }    //根據(jù)id更新文檔    @Test    void updateDocById() throws IOException {UpdateRequest request = new UpdateRequest("user", "123");        request.doc(JSON.toJSONString(new User("111", "cwx", 33)), XContentType.JSON);        UpdateResponse update = restHighLevelClient.update(request, RequestOptions.DEFAULT);        RestStatus status = update.status();        System.out.println(status);    }    //根據(jù)id刪除文檔    @Test    void deleteDocById() throws IOException {DeleteRequest request = new DeleteRequest("user", "123");        DeleteResponse delete = restHighLevelClient.delete(request, RequestOptions.DEFAULT);        RestStatus status = delete.status();        System.out.println(status);    }    //批量創(chuàng)建文檔    @Test    void createDocBulk() throws IOException {BulkRequest request = new BulkRequest();        User user1 = new User("777", "thegoodmen", 30);        User user2 = new User("888", "thegoodwomen", 50);        User user3 = new User("999", "thewellboy", 23);        User user4 = new User("100", "thewellgirl", 43);        User user5 = new User("121", "thegirlmen", 12);        ArrayListlist = new ArrayList<>();        list.add(user1);        list.add(user2);        list.add(user3);        list.add(user4);        list.add(user5);        for (User user : list) {request.add(new IndexRequest("user").source(JSON.toJSONString(user), XContentType.JSON));        }        BulkResponse bulk = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);        boolean status = bulk.hasFailures();        System.out.println(status);    }    //基本查詢    @Test    void selectByAge() throws IOException {SearchRequest request = new SearchRequest();        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();        //matchQuery是分詞之后再查詢的、termQuery是直接進行匹配(但是這個查詢不到數(shù)據(jù),換這個可以matchPhraseQuery)        MatchQueryBuilder builder = QueryBuilders.matchQuery("name", "good");        searchSourceBuilder.query(builder);        request.source(searchSourceBuilder);        SearchResponse search = restHighLevelClient.search(request, RequestOptions.DEFAULT);        Iteratoriterator = search.getHits().iterator();        while (iterator.hasNext()) {System.out.println(iterator.next());        }    }    //單條件查詢    @Test    void select1() throws IOException {//左右模糊查詢,相當于MySQL的%good%        SearchHitssearchHits = elasticsearchRestTemplate.search(                new NativeSearchQuery(QueryBuilders.queryStringQuery("good").field("name")),                User.class,                IndexCoordinates.of("user"));        //精準匹配,相當于name="good"        SearchHitssearchHits1 = elasticsearchRestTemplate.search(                new NativeSearchQuery(QueryBuilders.termQuery("name", "good")),                User.class,                IndexCoordinates.of("user"));        //普通匹配,相當于name like "%good%"        SearchHitssearchHits2 = elasticsearchRestTemplate.search(                new NativeSearchQuery(QueryBuilders.matchQuery("name", "good")),                User.class,                IndexCoordinates.of("user"));        //模糊匹配        SearchHitssearchHits3 = elasticsearchRestTemplate.search(                new NativeSearchQuery(QueryBuilders.fuzzyQuery("name", "good")),                User.class,                IndexCoordinates.of("user"));        //前綴匹配        SearchHitssearchHits6 = elasticsearchRestTemplate.search(                new NativeSearchQuery(QueryBuilders.prefixQuery("name", "men")),                User.class,                IndexCoordinates.of("user"));        //多字段的模糊匹配        SearchHitssearchHits7 = elasticsearchRestTemplate.search(                    new NativeSearchQuery(QueryBuilders.multiMatchQuery("aaa", "name")),                User.class,                IndexCoordinates.of("user"));        //前綴匹配        SearchHitssearchHits8 = elasticsearchRestTemplate.search(                new NativeSearchQuery(QueryBuilders.wildcardQuery("name", "m*n")),                User.class,                IndexCoordinates.of("user"));        //多內(nèi)容多字段的模糊匹配        String[] strings = {"good", "men"};        SearchHitssearchHits9 = elasticsearchRestTemplate.search(                new NativeSearchQuery(QueryBuilders.moreLikeThisQuery(new String[]{"aaa"}, MoreLikeThisQueryBuilder.Item.EMPTY_ARRAY)),                User.class,                IndexCoordinates.of("user"));        for (org.springframework.data.elasticsearch.core.SearchHite1 : searchHits9.getSearchHits()) {System.out.println(e1.getContent());        }    }    //多條件查詢    @Test    void select2() throws IOException {//數(shù)值型、日期、Ip的范圍查詢,相當于 between 80 and 90 ,80包含,90不包含        SearchHitssearchHits1 = elasticsearchRestTemplate.search(                new NativeSearchQuery(QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("age").from(80).to(90).includeLower(true).includeUpper(false))),                User.class,                IndexCoordinates.of("user"));        //范圍查詢、大于50小于等于90        SearchHitssearchHits2 = elasticsearchRestTemplate.search(                new NativeSearchQuery(QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("age").gt(50).lte(90))),                User.class,                IndexCoordinates.of("user"));        for (org.springframework.data.elasticsearch.core.SearchHite1 : searchHits1.getSearchHits()) {System.out.println(e1.getContent());        }    }    //多條件查詢    @Test    void select3() {// 排序        FieldSortBuilder price = SortBuilders.fieldSort("age").order(SortOrder.DESC);        // 高亮顯示        HighlightBuilder highlightBuilder = new HighlightBuilder().field("name");        // 分頁        PageRequest pageRequest = PageRequest.of(0, 2);        // 查詢條件        BoolQueryBuilder queryBuilder1 = new BoolQueryBuilder().must(new MatchQueryBuilder("name", "陳萬祥"));        BoolQueryBuilder queryBuilder2 = new BoolQueryBuilder().must(new MatchPhraseQueryBuilder("loc", "武威市"));        BoolQueryBuilder queryBuilder3 = new BoolQueryBuilder().must(QueryBuilders.queryStringQuery("蘭州市").field("name"));        //求和        SumAggregationBuilder field = AggregationBuilders.sum("sum").field("age");        //求平均值        AvgAggregationBuilder avgAggregationBuilder = AggregationBuilders.avg("avg").field("age");        ValueCountAggregationBuilder countAggregationBuilder = AggregationBuilders.count("count").field("name");        // 組裝上述查詢條件        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(queryBuilder1)                .withSorts(price)                .withHighlightBuilder(highlightBuilder)                .withPageable(pageRequest)                .build();        NativeSearchQuery searchQuery2 = new NativeSearchQueryBuilder()                .withAggregations(field)                .withAggregations(avgAggregationBuilder)                .withAggregations(countAggregationBuilder)                .build();        SearchHitsuser = elasticsearchRestTemplate.search(searchQuery, User2.class, IndexCoordinates.of("user"));        for (org.springframework.data.elasticsearch.core.SearchHithit : user.getSearchHits()) {System.out.println(hit.getContent());            MaphighlightFields = hit.getHighlightFields();            System.out.println(highlightFields.toString());        }        AggregationsContainer aggregations = user.getAggregations();        ElasticsearchAggregations aggregations1 = (ElasticsearchAggregations) aggregations;        Aggregations aggregations2;        if (aggregations1 != null) {aggregations2 = aggregations1.aggregations();            Sum sum = aggregations2.get("sum");            Avg avg = aggregations2.get("avg");            ValueCount count = aggregations2.get("count");            System.out.println(DataUtil.rmZeroSuper(sum.getValue()));            System.out.println(DataUtil.rmZeroSuper(avg.getValue()));            System.out.println(DataUtil.rmZeroSuper(count.getValue()));        }    }    //最基礎(chǔ)的聚合查詢    @Test    void select4() throws IOException {SearchRequest request = new SearchRequest("user");        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();        sourceBuilder.query(QueryBuilders.matchQuery("name", "yyy"));        TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("ageAvg").field("age").size(10);        sourceBuilder.aggregation(termsAggregationBuilder);        AvgAggregationBuilder sumAggregationBuilder = AggregationBuilders.avg("avg").field("age");        sourceBuilder.aggregation(sumAggregationBuilder);        request.source(sourceBuilder);        SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);        Aggregations aggregations = searchResponse.getAggregations();        Avg ageAvg = aggregations.get("avg");        System.out.println(ageAvg.getValue());        Terms terms = aggregations.get("ageAvg");        for (Terms.Bucket e1 : terms.getBuckets()) {System.out.println("年齡是" + e1.getKeyAsString() + "=====>" + "人數(shù)是" + e1.getDocCount());        }    }    //先分組再得到不同分組的指標查詢    @Test    void select5() {//先分組,并按指標排序        TermsAggregationBuilder termsAggregationBuilder1 = AggregationBuilders.terms("team_count").field("team").order(BucketOrder.aggregation("max_age", true));        termsAggregationBuilder1.subAggregation(AggregationBuilders.max("max_age").field("age"));        termsAggregationBuilder1.subAggregation(AggregationBuilders.avg("avg_age").field("age"));        termsAggregationBuilder1.subAggregation(AggregationBuilders.min("min_age").field("age"));        termsAggregationBuilder1.subAggregation(AggregationBuilders.sum("sum_age").field("age"));        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()                .withAggregations(termsAggregationBuilder1)                .build();        SearchHitsuser = elasticsearchRestTemplate.search(searchQuery, User3.class, IndexCoordinates.of("user1"));        for (org.springframework.data.elasticsearch.core.SearchHithit : user.getSearchHits()) {System.out.println(hit.getContent());        }        AggregationsContainer aggregations = user.getAggregations();        ElasticsearchAggregations aggregations1 = (ElasticsearchAggregations) aggregations;        Aggregations aggregations2;        if (aggregations1 != null) {aggregations2 = aggregations1.aggregations();            Terms terms = aggregations2.get("team_count");            //獲取聚合值的兩種方法            for (Terms.Bucket bucket : terms.getBuckets()) {Max max_age = bucket.getAggregations().get("max_age");                Min min_age = bucket.getAggregations().get("min_age");                Sum sum_age = bucket.getAggregations().get("sum_age");                Avg avg_age = bucket.getAggregations().get("avg_age");                System.out.println(bucket.getKeyAsString() + "的最大值是:" + max_age.getValue() + "的最小值是:" + min_age.getValue() + "的和是:" + sum_age.getValue() + "的平均值是:" + avg_age.getValue());            }            for (Terms.Bucket bucket : terms.getBuckets()) {MapasMap = bucket.getAggregations().asMap();                double max_age = ((ParsedMax) asMap.get("max_age")).getValue();                double min_age = ((ParsedMin) asMap.get("min_age")).getValue();                double sum_age = ((ParsedSum) asMap.get("sum_age")).getValue();                double avg_age = ((ParsedAvg) asMap.get("avg_age")).getValue();                System.out.println(bucket.getKeyAsString() + "的最大值是:" + max_age + "的最小值是:" + min_age + "的和是:" + sum_age + "的平均值是:" + avg_age);            }        }    }    //區(qū)間分組查詢    @Test    void select6() {HistogramAggregationBuilder histogramAggregationBuilder = AggregationBuilders.histogram("his_age").field("age").interval(10);        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()                .withAggregations(histogramAggregationBuilder)                .build();        SearchHitsuser = elasticsearchRestTemplate.search(searchQuery, User3.class, IndexCoordinates.of("user1"));        for (org.springframework.data.elasticsearch.core.SearchHithit : user.getSearchHits()) {System.out.println(hit.getContent());        }        AggregationsContainer aggregations = user.getAggregations();        ElasticsearchAggregations aggregations1 = (ElasticsearchAggregations) aggregations;        Aggregations aggregations2;        if (aggregations1 != null) {aggregations2 = aggregations1.aggregations();            Histogram terms = aggregations2.get("his_age");            for (Histogram.Bucket bucket : terms.getBuckets()) {System.out.println(bucket.getKeyAsString() + "的數(shù)量是:" + bucket.getDocCount());            }        }    }    //時間區(qū)間分組查詢    @Test    void select7() {/*          calendarInterval表示時間間隔是類型、minDocCount設(shè)置最小值、format設(shè)置輸出時間的格式化、          missing當那個統(tǒng)計字段為null的時候,填充某個值,然后按照填充的值,統(tǒng)計計算         */        DateHistogramAggregationBuilder aggregationBuilder = AggregationBuilders.dateHistogram("his_birth")                .field("birth")                .calendarInterval(DateHistogramInterval.MONTH)                .minDocCount(0)                .format("yyyy-MM-dd")                .missing("2021-07-27");        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()                .withAggregations(aggregationBuilder)                .build();        SearchHitsuser = elasticsearchRestTemplate.search(searchQuery, User3.class, IndexCoordinates.of("user1"));        for (org.springframework.data.elasticsearch.core.SearchHithit : user.getSearchHits()) {System.out.println(hit.getContent());        }        ElasticsearchAggregations aggregations = (ElasticsearchAggregations) user.getAggregations();        if (aggregations != null) {Histogram terms = aggregations.aggregations().get("his_birth");            for (Histogram.Bucket bucket : terms.getBuckets()) {System.out.println(bucket.getKeyAsString() + "的數(shù)量是:" + bucket.getDocCount());            }        }    }    //指定范圍區(qū)間分組查詢    @Test    void select8() {/*          calendarInterval表示時間間隔是類型、minDocCount設(shè)置最小值、format設(shè)置輸出時間的格式化、          missing當那個統(tǒng)計字段為null的時候,填充某個值,然后按照填充的值,統(tǒng)計計算         */        RangeAggregationBuilder aggregationBuilder = AggregationBuilders.range("range_age")                .field("age")                .addUnboundedTo(10)                .addRange(11, 30)                .addRange(31, 50)                .addUnboundedFrom(100);        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()                .withAggregations(aggregationBuilder)                .build();        SearchHitsuser = elasticsearchRestTemplate.search(searchQuery, User3.class, IndexCoordinates.of("user1"));        for (org.springframework.data.elasticsearch.core.SearchHithit : user.getSearchHits()) {System.out.println(hit.getContent());        }        ElasticsearchAggregations aggregations = (ElasticsearchAggregations) user.getAggregations();        if (aggregations != null) {Range terms = aggregations.aggregations().get("range_age");            for (Range.Bucket bucket : terms.getBuckets()) {System.out.println(bucket.getKeyAsString() + "的數(shù)量是:" + bucket.getDocCount());                //起始范圍值                Object from = bucket.getFrom();                //終止范圍值                Object to = bucket.getTo();                System.out.println(from + "\t" + to);            }        }    }    //指定時間范圍區(qū)間分組查詢    @Test    void select9() {DateRangeAggregationBuilder aggregationBuilder = AggregationBuilders.dateRange("data_range_birth")                .field("birth")                .format("yyyy")                .addUnboundedTo("2000")                .addRange("2001", "2010")                .addRange("2011", "2020")                .addUnboundedFrom("2021");        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()                .withAggregations(aggregationBuilder)                .build();        SearchHitsuser = elasticsearchRestTemplate.search(searchQuery, User3.class, IndexCoordinates.of("user1"));        for (org.springframework.data.elasticsearch.core.SearchHithit : user.getSearchHits()) {System.out.println(hit.getContent());        }        ElasticsearchAggregations aggregations = (ElasticsearchAggregations) user.getAggregations();        if (aggregations != null) {Range terms = aggregations.aggregations().get("data_range_birth");            for (Range.Bucket bucket : terms.getBuckets()) {System.out.println(bucket.getKeyAsString() + "的數(shù)量是:" + bucket.getDocCount());            }        }    }    //指定ip區(qū)間分組查詢    @Test    void select10() {//TODO 這個地方的ip類型不能用來聚合,加上.keyword也不行,不知如何解決        IpRangeAggregationBuilder aggregationBuilder = AggregationBuilders.ipRange("ip_range")                .field("ip")                .addUnboundedTo("192.168.0.0")                .addRange("192.168.0.1", "192.168.0.122")                .addRange("192.168.5.0", "192.168.7.134")                .addUnboundedFrom("192.168.12.122");        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()                .withAggregations(aggregationBuilder)                .build();        SearchHitsuser = elasticsearchRestTemplate.search(searchQuery, User3.class, IndexCoordinates.of("user1"));        for (org.springframework.data.elasticsearch.core.SearchHithit : user.getSearchHits()) {System.out.println(hit.getContent());        }        ElasticsearchAggregations aggregations = (ElasticsearchAggregations) user.getAggregations();        if (aggregations != null) {Range terms = aggregations.aggregations().get("ip_range");            for (Range.Bucket bucket : terms.getBuckets()) {System.out.println(bucket.getKeyAsString() + "的數(shù)量是:" + bucket.getDocCount());            }        }    }    //指定過濾條件分組查詢    @Test    void select11() {FiltersAggregationBuilder aggregationBuilder = AggregationBuilders.filters("filter",                new FiltersAggregator.KeyedFilter("men", QueryBuilders.termQuery("sex", "true")),                new FiltersAggregator.KeyedFilter("women", QueryBuilders.termQuery("sex", "false")));        // 高亮顯示        HighlightBuilder highlightBuilder = new HighlightBuilder().field("sex").preTags("").postTags("");        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()                .withAggregations(aggregationBuilder)                .withHighlightBuilder(highlightBuilder)                .build();        SearchHitsuser = elasticsearchRestTemplate.search(searchQuery, User3.class, IndexCoordinates.of("user1"));        for (org.springframework.data.elasticsearch.core.SearchHithit : user.getSearchHits()) {MaphighlightFields = hit.getHighlightFields();            System.out.println(hit.getContent());            System.out.println(highlightFields.toString());        }        ElasticsearchAggregations aggregations = (ElasticsearchAggregations) user.getAggregations();        if (aggregations != null) {Filters terms = aggregations.aggregations().get("filter");            for (Filters.Bucket bucket : terms.getBuckets()) {System.out.println(bucket.getKeyAsString() + "的數(shù)量是:" + bucket.getDocCount());            }        }    }}

四、命令的方式實現(xiàn)對Es的curd

DELETE /user3PUT /user{"settings": {"number_of_replicas": 2,    "number_of_shards": 3  },   "mappings": {"properties": {"name":{"type": "text",        "analyzer": "ik_max_word"      },      "sex":{"type": "boolean"      },      "age":{"type": "long"      },      "loc":{"type": "text",        "analyzer": "ik_max_word"      },      "team":{"type": "keyword"      },      "birth":{"type": "date"      },      "id":{"type": "ip"      },      "country":{"type": "keyword"      },      "habby":{"type": "text"      },      "balance":{"type": "float"      }    }  }}POST /user/_doc/{"name":"陳萬祥",  "age":12,  "sex":true,  "loc":"甘肅省武威市",  "team":"red",  "birth":"1998-01-10",  "ip":"192.168.0.3",  "country":"china",  "habby":["basketball","sing","dance"],  "balance":8700.12}POST /user/_doc/{"name":"陳萬祥",  "age":122,  "sex":true,  "loc":"甘肅省武威市",  "team":"blue",  "birth":"1998-01-10",  "ip":"192.168.0.",  "country":"france",  "habby":["basketball","sing"],  "balance":82111}POST /user/_doc/{"name":"勞霞明",  "age":21,  "sex":true,  "loc":"廣西欽州市",  "team":"red",  "birth":"1997-01-10",  "ip":"192.168.3.11",  "country":"china",  "habby":["swming","dance"],  "balance":800.12}POST /user/_doc/{"name":"汪明",  "age":24,  "sex":false,  "loc":"天津市",  "team":"green",  "birth":"1998-02-10",  "ip":"192.165.0.3",  "country":"china",  "habby":["sing","read"],  "balance":9000}POST /user/_doc/{"name":"蔡徐坤",  "age":12,  "sex":true,  "loc":"甘肅省蘭州市",  "team":"green",  "birth":"1998-03-10",  "ip":"192.167.0.0",  "country":"france",  "habby":["game","eat"],  "balance":2300}POST /user/_doc/{"name":"愛英斯坦",  "age":45,  "sex":true,  "loc":"甘肅省張掖市",  "team":"blue",  "birth":"2003-06-10",  "ip":"192.168.0.32",  "country":"england",  "habby":["basketball","sing","dance"],  "balance":6900}POST /user/_doc/{"name":"歐拉",  "age":65,  "sex":false,  "loc":"甘肅省天水市",  "team":"blue",  "birth":"2021-08-10",  "ip":"192.168.6.3",  "country":"china",  "habby":["basketball","dance"],  "balance":4300}POST /user/_doc/{"name":"上帝",  "age":22,  "sex":false,  "loc":"西方世界",  "team":"black",  "ip":"192.168.3.3",  "country":"england",  "habby":["eat","game","sing"],  "balance":12000.12}GET /user/_doc/_searchGET /user/_doc/_search{"query":{"term":{"name":"陳萬祥"    }  },  "from":0,  "size":10,  "sort":[{"age":"desc"  }],  "highlight":{"fields":{"name":{}    }  }}#求出user索引的和GET /user/_doc/_search{"aggs":{"user1_sum":{"sum":{"field":"age"      }    }  }}#求出user索引的最大值GET /user/_doc/_search{"size":0,  "aggs":{"user1_max":{"max":{"field":"age"      }    }  }}#根據(jù)team字段聚合分組、并得到每個分組的求和、最大值、最小值、平均值GET /user/_doc/_search{"size":0,  "aggs":{"user1_term":{"terms":{"field":"team"      },      "aggs":{"term_sum":{"sum":{"field":"age"        }        },        "term_max":{"max":{"field":"age"        }},        "term_min":{"min":{"field":"age"        }},        "term_avg":{"avg":{"field":"age"        }}      }    }  }}#查看工資范圍的百分比GET /user/_search{"size": 0,   "aggs": {"balance_a": {"percentile_ranks": {"field": "balance",        "values": [2000,4000,6000,8000,10000]      }    }  }}#查看一些計數(shù)、最小值、最大值、平均值、求和分別是多少GET /user/_search{"size": 0,   "aggs": {"balance_a": {"stats": {"field": "balance"      }    }  }}#查看一些其他的指標結(jié)果GET /user/_search{"size": 0,   "aggs": {"balance_a": {"extended_stats": {"field": "age"      }    }  }}#查看對字段sex的聚合GET /user/_search{"size": 0,   "aggs": {"sex_a": {"terms": {"field": "sex"      }    }  }}#聚合并排序GET /user/_search{"size": 0,   "aggs": {"sex_a": {"terms": {"field": "team",        "order": {"max_a": "desc"        }      },        "aggs":{"max_a":{"max":{"field": "age"            }          }        }          }  }}#聚合支持腳本GET /user/_search{"size": 0,   "aggs": {"sex_a": {"terms": {"script": "doc["team"].value"      }    }  }}#篩選出包含指定詞語和不包含的GET /user/_search{"size": 0,   "aggs": {"term_a": {"terms": {"field": "age",        "include": "*.市"      }    }  }}#------------------------------------------------DELETE user3#多字段聚合的實現(xiàn)方式:#1、通過腳本合并字段#2、使用copy_to方法合并兩個字段PUT /user3{"mappings": {"properties": {"name":{"type": "text",        "fielddata": true              }    }  }}PUT /user3{"mappings": {"properties": {"name":{"type": "text",        "fields": {"keyword":{"type":"keyword"          }        }      }    }  }}POST /user3/_doc{"name":"hello word"}GET /user3/_search{"query": {"match": {"name": "hello"    }  },   "aggs":{"testq":{"terms":{"field":"name.keyword"      }    }  }}PUT test3POST test3/stu{"name":"cwx"}POST test3/tes{"name":"lxm"}

五、集群

六、優(yōu)化

1、聚合為什么慢?

大多數(shù)時候?qū)蝹€字段的聚合查詢還是非??斓?, 但是當需要同時聚合多個字段時,就可能會產(chǎn)生大量的分組,最終結(jié)果就是占用 es 大量內(nèi)存,從而導致 OOM 的情況發(fā)生。 實踐應用發(fā)現(xiàn),以下情況都會比較慢: 1)待聚合文檔數(shù)比較多(千萬、億、十億甚至更多); 2)聚合條件比較復雜(多重條件聚合); 3)全量聚合(翻頁的場景用)。

2、聚合優(yōu)化方案探討

參考鏈接:https://blog.csdn.net/laoyang360/article/details/79253294

優(yōu)化方案一:默認深度優(yōu)先聚合改為廣度優(yōu)先聚合。

"collect_mode" : "breadth_first"

depth_first 直接進行子聚合的計算 breadth_first 先計算出當前聚合的結(jié)果,針對這個結(jié)果在對子聚合進行計算。 優(yōu)化方案二: 每一層terms aggregation內(nèi)部加一個 “execution_hint”: “map”。

"execution_hint": "map"

Map方式的結(jié)論可簡要概括如下: 1)查詢結(jié)果直接放入內(nèi)存中構(gòu)建map,在查詢結(jié)果集小的場景下,速度極快; 2)但如果待結(jié)果集合很大的情況,map方式不一定也快。

3、運用 shard_size 來提高 term aggregation 的精度

參考鏈接:https://blog.csdn.net/UbuntuTouch/article/details/104141398

請求的大?。╯ize)越大,結(jié)果將越準確,但計算最終結(jié)果的成本也將越高(這兩者都是由于在分片級別上管理的優(yōu)先級隊列更大,并且節(jié)點和客戶端之間的數(shù)據(jù)傳輸也更大)。

shard_size 參數(shù)可用于最大程度地減少請求的大小帶來的額外工作。 定義后,它將確定協(xié)調(diào)節(jié)點將從每個分片請求多少個術(shù)語。 一旦所有分片都做出響應,協(xié)調(diào)節(jié)點便會將它們縮減為最終結(jié)果,該最終結(jié)果將基于size參數(shù)-這樣一來,可以提高返回條款的準確性,并避免流回大量存儲桶的開銷給客戶。

注意:shard_size 不能小于 size(因為意義不大)。 啟用時,Elasticsearch 將覆蓋它并將其重置為等于大小。

缺省 shard_size為(size* 1.5 + 10)。

Terms aggregation 對于大量數(shù)據(jù)來說通常是不精確的

我們先來看一下如下的一個圖:

從上面的圖中,在 shard_size 為3的情況下,我們想對 geoip.country_name 這個字段來進行 terms aggregation:

從 shard 0 中提取文檔數(shù)靠前的前三個,它們分別是 USA,India 及 France。它們的文檔數(shù)分別是5,4及4。 從 shard 1 中提取文檔數(shù)靠前的前單個,它們分別是 USA,India 及 Japan。它們的文檔數(shù)分別是4,5及3。 那么總的文檔數(shù)是:

USA為:5 + 4 = 9India為:4 + 5 = 9France為:4 + 0 = 4Japan為: 3 + 0 = 3

根據(jù)上面的計算,返回的結(jié)果將會是 USA,India 及 France。細心的開發(fā)者可能馬上可以看出來,在上面的統(tǒng)計中國其實是不精確的,這是因為在 shard 0 中,我們可以看見 Japan 有3個文檔沒有被統(tǒng)計進去。這個統(tǒng)計是基于我們對 shard_size 為3的情況。假如我們把 shard_size 提供到4,情況馬上就會不同,而且更加接近我們的實際的統(tǒng)計數(shù)據(jù)的結(jié)果。在這種情況下,Japan 將會有 3 + 6 共6很個文檔,應該是排名第3。

我們可以修改我們的請求如下:

GET logs_server*/_search{  "size": 0,  "aggs": {    "top_10_urls": {      "terms": {        "field": "geoip.country_name.keyword",        "size": 10,        "shard_size": 100      }    }  }}

我們可以通過增加 shard_size 來提高數(shù)據(jù)的精確性,但是必須注意的是這樣的代價是計算的成本增加,特別是針對大量數(shù)據(jù)而言。

責任編輯:

標簽:

相關(guān)推薦:

精彩放送:

新聞聚焦
Top 日本丰满少妇毛茸茸| 亚洲综合网男人的天堂| av看片资源网手机版在线播放 | 亚洲av永久无码精品尤物| 色噜噜狠狠一区二区| 亚洲情色成人一二三区| av大片免费观看网站| 宾馆偷拍一区二区三区| 91高清免费在线播放| caoporn中文字幕视频| 瑟瑟免费在线观看视频| 色婷婷综合欧美日韩亚洲| 男女视频一区在线观看| 精品黑丝袜一区二区三区| 久久久精品国产综合| 大香蕉太香蕉在线免费看| 在线不卡无毒你懂得| 三级日本美女少妇99| 伊人婷婷视频在线观看| 中文字幕乱码人妻在线观看| 亚洲国产成人爱av网站| 在线观看一区二精品视频| 欲求不满的邻居人妻一区二区三区 | 日本成人av在线免费看| 日本在线不卡视频播放| 啊啊啊啊在线视频观看| 日本黄站一区二区在线观看| 男人午夜视频在线观看| 日韩一二三在线视频播放| 91免费一区二区久久| 亚洲综合精品天堂丁香芒果| 漂亮人妻口爆深喉免费视频| 青青国产的视频在线播放| 六十六节医疗保健操全套| 中文字幕亚洲精品熟女少妇| av色综合久久天堂av…| 日韩中文字幕色资源| 亚洲日韩色欧另类欧美色吊丝| 一区二区三区高清在线| 啊!用力操我!好爽| 色婷婷综合欧美日韩亚洲| 中文字幕亚洲精品熟女少妇| 国产亚洲精品久久久久久电影 | 日本丰满少妇毛茸茸| 午夜国产精品福利一二| 蜜桃精品噜噜噜成人av小说| 亚洲最大av无码国产网址 | 黄色片在线免费观看日韩不卡| caoporm超碰97| 在线观看免费视频网站色| 国产乱人伦Av在线麻豆A| 日韩中文字幕一级乱码在线亚洲| 亚洲天堂中文字幕手机在线| 大香蕉手机免费在线| 欧美性感美女高潮视频 | 欧美日韩一区二区a∨视频| 尤物在线免费视频观看| 在线精品亚洲欧美日韩| 大香线蕉视频在线观看75| 亚洲欧美三级在线观看视频| 国产99热这里有精品| 天天操,天天射,天天日| 北条麻妃超碰av在线播放| 欧美图区一区二区三区| 国产精品久久性欧美| 人妻少妇麻豆中文字幕久久精品 | 邪恶老湿精品一区二区| 78m中文字幕在线观看| 免费一级特黄特色黄录像| 日本xxxxx久久| 亚洲欧美专区一区二区三区| 欧美日韩黄色aaa| 蜜桃精品噜噜噜av| 99精品国产免费电影| 中文字幕第一区高清av| 免费在线观看不卡高清av| 亚洲国产成人久久无码| 日韩不卡免费一区二区三区视频| 国产精品久久久免费99| 免费可以看黄页的视频| 熟女人妻 在线观看| 久久青草在线观看视频| 久久久精品欧美一区二| 四十路の五十路熟女网址| 亚洲女人毛毛多毛耸耸| 9久久久久久久久久久| 91青青青青艹视频在线观看 | 国产黄色片在线观看网站| 男人插女人动漫视频| 91新视频在线免费观看| 99偷拍精品一区二区| 性美女毛片久久a区| 鲁久久无码五月天有码| 男女裸交无套啪啪激情高潮| 国产在线观看XXXXX| 中文字幕日产av一二三区| 欧美日韩中文国产一区| 2017在线免费观看中文a| 好色av一区二区三区四区| 美女福利在线免费观看| 91极品尤物国产在线播放| 少妇性感美女一区二区三区四区| 日本久道久久综合狠狠老| 成年视频短视频在线播放| 亚洲最新欧美偷拍视频| 2023天天色天天操| 熟女人妻五十路x50| 日韩一级片黄色av| 青青青在线视频免费观看手机版| 在线视频播放免费网站| 男人插女人阴穴的视频| 亚洲综合一区二区在线视频| 字幕人妻一区二区视频| 加勒比人妻av系列专区| 2017在线免费观看中文a| 亚洲黄色片免费在线| av一区二区在线播放色婷婷精品| 熟女人妻五十路x50| 宅男视频在线观看视频| 精华液一区二区区别| 男女又黄又刺激a片免费| 涩爱av一区二区在线播放视频| 巨大屁股女教师极品白嫩少妇| 又大又黄又粗又爽少妇毛片| 国产免费自拍视频精选| 深夜黄色福利网站在线观看| 欧美一卡二卡3卡4卡无卡十| 国产一级二级三级在线看| 亚洲av丝袜诱惑在线| 激情综合亚洲欧美日韩一区| 国内老熟妇精品露脸视频| 亚洲地址一区二区三区四区| 97超碰在线资源总站| 11yyy国产成人综合在线观看| 天天插天天干天天爽| 亚洲区欧美区自拍偷拍区| 日韩免费一卡二卡三卡四卡五卡| 老太熟妇乱淫aaaaa片免费| 在线人妻中文av导航| 欧美一区二区三区在线爱爱| 精品国产不卡在线观看免费| 淫色网亚洲av日韩av| 成人涩涩小片视频日本| 国产av一区二区最新精品| 精品国产精品国产免费| 青青国产成人在线看| 国产精品一级片免费看| 天天色天天操天天色综合| 日韩黄色a影视在线免费观看网站 日本久久久久久久久人妻视频 | 久久精品aⅴ无码中文字字幕蜜桃 中文字幕丝袜人妻乱一区三区 | 成人网视频欧美在线观看| 好紧好湿好爽好大A视频| 亲爱的请你原谅我 中文字幕| 强伦轩人妻一区二区三| 国产av一区二区最新精品| 国产精品不卡在线播放| 欧美欧美欧美欧美欧美欧美| 男女啪啪自拍露脸视频| 亚洲成电影在线观看青青| 国产高清 国产av| 2022国产情侣在线视频播放| 强d乱码中文字幕熟女导航| 亚洲天堂啪啪爱之巢穴| 国产99热这里有精品| 免费在线视频 中文字幕| 亚洲区欧美区自拍偷拍区| 久久久久免费特级黄片| 亚洲最大的中文字幕在线| 国产精品制服诱惑丝袜的| 999精品欧美一区二区三区黑人| 在线观看视频一区二区精品| 色偷偷欧美男人的天堂| 久久久久久久久久99蜜桃| 伊人激情综合视频网| 啊!用力操我!好爽| 在线观看国产区一区二| 熟妇人妻一区二区三区| 男女啪啪视频免费国产| 亚洲第一中文视频 | 欧美丝袜办公室在线91| 少妇人妻系列500视频| 91极品尤物国产在线播放| 国产精品免费观看av| 精品国产污网址在线观看| 超碰av在线一区二区三区| 在线观看免费a级电影| 女高中生第一次破苞av| 中文字幕在线观看操穴视频| 天天摸天天舔天天透| 欧美人妖一区二区三区| 亚洲欧洲久久av日日更新| 日韩夫妻性生活视频在线观看免费| 黑人久久一区二区三区| 久久久亚洲av成人网人人| 97香蕉在线17c| 91黄色大全免费观看| 丰满女人的毛片久久久久久| 亚洲av熟女av熟女| 天天搡天天狠天干天| 中文字幕人妻丝袜二区av| 成年永久免费播放平台| 亚洲经典国产一区二区三区 | xxx一区二区三区在线观看| 强行进女小姪女小芳| 国产区精品一区二区不卡中文| 91激情视频在线视频| caoporn97超碰| 91精品青草福利久久午夜| 国产呻吟揉丰满一区三六区| 亚洲风情 国内自拍av| 久久久com久久久com| 亚洲欧美激情人妻人妻综合| 97视频免费观看一区| 青青青在线视频免费观看手机版| 国产高清 国产av| 欧美色高清vvvvvv| 午夜两性操一操在线观看嗯嗯啊 | 久久精品国产亚洲av四区| 国产一二三区在线播放| 免费观看男人操逼的操女人的| 亚洲91色精品一区二区| 日本中文字幕第三区| 亚洲欧洲视频一二三区| 啪啪啪啪一区二区三区四区三级片| 中文一区二区在线播放| 特黄把女人弄爽又大又粗| 精品在线观看一区二区视频| 日韩一区=区三区四区| 制服乱伦强奸中文字幕| 另类激情国产专区在线观看免费| 在线视频播放免费网站| 在线亚洲视频免费看| 视频一区 欧美情色| 字幕人妻一区二区视频| 91精品青草福利久久午夜| 手机在线看日韩av资源| 97超碰资源在线播放| 人妻夜夜爽av网站| 欧美日韩精品免费看| 亚洲一区二区蜜乳av| 中文字幕中文有码在线精品| 97超碰在线中文字幕精品| 免费一级特黄特色大片88av | 人妻少妇资源网av| 免费国产一区二区三区在线播放| 国产名人亚洲视频中文字幕| 国产婷婷色三区二区一区| 91九色porny蝌蚪主页| 免费精品国产人妻国语| 五月开心六月伊人色婷婷| 制服中文丝袜国产日韩另类| 日本最新区免费中文字幕 | 日本xxxxx久久| 欧美亚洲国产激情在线| 国产精品网在线观看| 91精品久久一区二区| av色伊人久久综合一区二区 | 精品黄色一级久久久久久久久 | 大香蕉av电影在线| 蜜桃系列一区二区观看| 好大好粗好爽好黄c黄片| 午夜福利92一区二区三区久久| 99视频精品在线免费观看| 97人人澡人人添人人爽| 精品人妻人人做人碰人人爽| 男人的天堂av 色噜噜| 免费在线视频 中文字幕| 黄色av网址免费观看| 91精品丝袜久久久| 日本黄色录像第1部播放器播放| 天天玩天天摸天天舔| 国产主播在线露脸观看| 日韩在线视频观看你懂的| 熟女视频一区二区在线观看| 桃子av在线免费观看| 石原莉奈一区二久久影视| 久亚洲aⅴ一区二区三区写真| 97精品视频久久久久| 欧美精品色呦呦首页| 日韩精品视频网站免费观看| 午夜美女直播福利视频| 男女边摸边吃奶边做视频免费看 | 好紧好湿好爽好大A视频| 4438x视频在线| 日本aaaaa特黄| 玩弄放荡人妻少妇免费视频| 狠狠添狠狠添狠狠添免费出高潮水 | 国产 精品 日韩 人妻| 在线观看国产区一区二| 一区二区三区麻豆蜜桃视频| 国产精品蜜臀在线观看| 欧美色视频日本片免费看| 日本丰满人妻免费电影| 国产主播av在线观看| 国产三级在线一区二区三区| 91精品国产在热久久| 色婷婷综合久久精品一区二区三区| 秋霞网av一区二区三区中文字幕| 亚洲va欧美va人人爽2| 女同性ⅹxx女同hd偷拍| 人人爱精品人人艹人人干| 欧美人妖一区二区三区| 国产一区二区三区在线资源| 韩国美女视频在线观看18+| 色www亚洲国产张柏芝| av熟女40到50岁名字| 密乳一区二区三区国产亚洲av| 国产不卡剧情在线观看| 狠狠综合久久亚洲av蜜臀| 国产99热这里有精品| 在线观看免费视频网站色| 成年人在线观看福利视频 | 国产亚洲精品视频久久久| 亚洲综合在线一区二区三区四区| 中文字幕第一区高清av| 黄色古装操逼小视频| 大香蕉红杏在线观看| 可以免费直接观看的av| 日本人妻偷人妻中文字幕| 人妻熟妇中文字幕免费视频| 啪啪啪在线观看免费视频| 国产婷婷色三区二区一区| 国产在线观看av专区| 日韩精品性色一区二区在线观看| 91中文日韩免费精品| 亚洲视频资源在线播放| 91九色黑丝长腿美女| 床戏高潮呻吟声片段大全| 国产亚洲av网址大全| 亚洲天堂国产精品乱伦一区| 日产国产亚洲精品系列p| 在线观看欧美日一区二区 | 99精品国产免费电影| 精品人妻人人做人碰人人爽| 99精品在线免费观看| 天天操日日干夜夜操| 精品亚洲国产亚洲国产| 国产精品大片在线观看网站资源| 日本成年人大片免费观看| 中文字幕一二区二三区人妻专区| 国产女人AAA级久久久级| 亚洲情色在线视频播放| 亚洲天堂av成人在线观看| 亚洲专区 欧美日韩| 亚洲熟女少妇 精品| 三级视频欧美视频亚洲视频| 嗯啊好想要插我视频| 欧美av在线观看网址| 少妇丰满一区一二区视频社区| 日韩精品性色一区二区在线观看| 亚洲国产精品成人综合色| 免费一级特黄特色黄录像| 亚洲女子4x100米接力决赛| 97超碰在线资源总站 | 99青青草原在线视频| 日本少妇一二三视频| 亚洲清纯国产com| 亚洲最大第八色在线视频| 国产精品视频综合一区二区| 瑟瑟视频在线网站免费观看| 中文字幕亚洲天堂av在线| 国产av剧情网址大全| 国内精自线一二三四区| av亚洲欧美一区二区| 91超碰在线播放视频| 一级av中文字幕在线观看| 中文字幕中文字幕在线一区 | 亚洲av天堂av在线| 91精品丝袜人妻久久久久久| 成年永久免费播放平台| 三级黄色在线播放网站| 国产交换乱淫99视频| 手机在线一区二区三区| 99精品午夜一区二区三区| 熟妇av一区二区三区| 中文字幕欧美人妻精品精品| 国产精品久久久久久无码不卡| 亚洲av日韩美aⅴ| 日日躁夜夜躁狠狠躁av蜜臀| caopron在线成人免费| 国产成人自拍在线播放| 人妻熟妇中文字幕免费视频| av大片免费观看网站| 欧美三级不卡在线播放 | 9999国产精品免费| av色伊人久久综合一区二区 | 97超碰在线资源总站 | 清纯国模自拍视频在线观看| 亚洲和黑人特黄色片| 亚洲最新欧美偷拍视频| 精品人妻熟女a62v久久| 超碰国产极品尤物在线| 狠狠躁夜夜躁人人爽天天BL| 日韩中文av在线观看| 人妻ol未亡人中文字幕| 日本二区三区精品免费| 久久精品日产第一区二区三区 | 日本二区三区精品免费| 在线观看国产剧情av| 亚洲av熟女av熟女| 日本少妇的秘密视频| 欧美日韩精品亚洲欧美| 国产精品一级片免费看| 久久久久久久岛国免费播放| 国产亚洲精品视频久久久| 国产美女精品久久久有奶水| 操女人逼逼好爽啊操| av中文字幕 中文字幕第一页 | 夜夜躁爽日日躁狠狠躁一区| 99精品国产中文字幕| 中国精品视频在线观看一区二区 | 三级大尺度无码视频| 国产老女人av一区二区三区| 国产寡妇又爽又紧又湿视频| 91在线观看青青超碰| 日本亚洲综合伊人久久| 少妇性感美女一区二区三区四区| 日本精品一区二区三区不卡| 欧美人体一区二区视频| 欧美一卡二卡3卡4卡无卡十| 91精品青草福利久久午夜| 亚洲免费在线观看,| 中文字幕在线aⅴ免费观看| 9网网站免费看nb国产| 国产成年无码av片在线| 人妻一区二区三区中文字幕免费| 欧美日韩性生活视频在线| 成人av网站在线观看| 人妻熟女中文字幕电影| 亚洲清纯国产com| 天天操日日干夜夜操| 亚洲欧美日本高清在线观看 | 国产91手机精品在线播放| 黄免费在线观看视频| 黄色片在线免费观看日韩不卡| 美女精品一区二区三区| 天天操日日干夜夜操| 免费一级特黄特色黄录像| 美女厕所撒尿偷拍视频| 六十六节医疗保健操全套| 国产91色婷婷手机在线| 亚洲av永久无码精品尤物| 77字幕网77中文字幕| 日本黄色an久久一区| 伊人国产精品成人在线| 日本一区二区亚洲综合| 成年视频短视频在线播放| 国产亚洲高清视频精彩在线播放| 欧美猛少妇色xxxxxhd| 午夜少妇成人人妻av| 精品国产伦理片1区2区| 日本一区二三区好的精华液| 91瑟瑟视频在线观看| 涩爱av一区二区在线播放视频| 国产一级久久久久高清版| 在线视频 中文字幕 一区二区| 国产成人自拍在线播放| 天天日天天操天天干天天舔天天射 | 人妻精品无码一区二区三区百花| 欧美国产一区二区三区| 国产精品国产三级区别第一集| 久久精品乱码中文字幕| 精品久久久久久无码中文野结衣| 亚洲国产长腿丝袜av天堂| 亚洲91色精品一区二区| 最近最新中文字幕资源在线| 在线视频 中文字幕 一区二区| 国产av一区二区最新精品| 欧美性感美女高潮视频| 中文字幕少妇av一区二区三区| 中文字幕久久五月天| 国产一二三区在线播放| 97视频免费公开在线播放| 亚洲无码免费一二三区视频| 日韩精品性色一区二区在线观看| 野花日本高清在线观看| 8x8x国产在线观看一区二区| 亚洲av蜜臀在线观看| 最新97在线视频资源| 色老汉av一区二区三区| 日本一卡不带卡的视频| 人妻少妇久久中文字幕密拍| 日韩午夜小视频合集| 巨大屁股女教师极品白嫩少妇| 中国黄页毛片免费视频| 无套内射黑丝美女91| 国产精品自产拍在线观| 亚洲一区二区婷婷久久| 初撮日本五十路人妻| 精品黄色一级久久久久久久久 | 超碰在线97观看国产| 精品人妻一二三区更新| 日韩一二三区免费播放视频| 少妇又色又紧又爽又刺激视频| 在线人妻中文av导航| 视频一区二区亚洲欧美| 精品少妇人妻av免费麻豆| 成人av中文字幕网址| 91精品人妻丰满熟妇| 国产精品一级片免费看| 亚洲国产成人精品久久久久久久久| 夜夜色视频在线观看| 中文字幕_第1页_绿茶av| 日本99精品一区二区三区| 日本va欧美va国产综合va| 成年永久免费播放平台| 国产主播av在线观看| 中文字幕99精品一区| 一区二区三区高清在线| 97视频免费公开在线播放| 看国产剧的免费软件| 欧美精品视频一卡二卡| 亚洲最大的中文字幕在线| 欧美视频一区二区三区三州| 青青草手机免费在线视频| 美日韩黄色一级视频| 国产精品视频自拍一区| 国语自产免费精品视频一区二区| 日韩妹子精品视频在线观看| 蜜臀久久99精品久久久久久久久| 在线不卡无毒你懂得| 乱色熟女综合一区二区三区四| 最近的中文字幕一区二区| 中文字幕 av 在线| 精品黄色一级久久久久久久久| 台湾性dvd性色av| 天天干天天谢天天操| 午夜福利无码一区二区三区| 国产青青自拍视频在线观看看| 国产老女人av一区二区三区| 日本黄站一区二区在线观看| 欧美大香蕉一区二区三区| 蜜桃精品噜噜噜av| 韩国美女主播福利在线| 人妻斩43r熟女人妻| 中文字幕人妻丝袜二区av| 97久久超碰成人精品网页91| 人妻蜜臀久久久av免费| 欧美老熟妇乱子伦视频在线观看| 国产在线免费av观看| 天天透天天插天天日| 人妻熟妇久久久久久xxx| 都市激情亚洲春色男人皇宫| 国产精品免费视频22| 爱妃视频av一区二区| 中文字幕在线观看一二三四| 久9热精品视频在线播放| 91精品综合一区二区三区| 五月婷婷六月久久久| 亚洲嘿嘿网站在线观看| av天堂中文版www在线| 99在线只有精品视频| 欲求不满的邻居人妻一区二区三区| 黄片网址在线观看视频| 最新日韩成人av电影| 久久与久久最新视频| av色综合久久天堂av…| 色噜噜狠狠一区二区| 免费在线观看成人激情视频| 少妇18禁久久yy| 亚洲风情 国内自拍av| 一本v亚洲v天堂一区二区| 青青青久免费在线视频| 久久精品国产亚洲av四区| 国产97精品在线免费看| 国产无套水多大学生性色AV| av精品一区二区三区免费观看| 熟女国产一区二区三区| 99成人自拍视频在线观看| 蜜桃精品www视频在线观看| xxx一区二区三区在线观看| 强d乱码中文字幕熟女导航 | 在线成人中文字幕网站| av熟女40到50岁名字| 成人av在线国产精品| 91精品免费在线播放| 日本成年人大片免费观看 | 在线免费观看国产欧美日韩| 人妻在线一区二区三区| 女友97年白嫩漂亮在线看| 国内精品视频免费观看视频| 国产视频播放一区二区三区| 好好的日com中文视频| 在线步兵一区二区三区| 亚洲情色成人精品视频| 韩国的黄萝卜是怎么腌制的| 在线观看视频一区二区精品| 精品国精品国自产在产国产| 9999国产精品免费| 日本女人牲交的视频| 中文字幕中文字幕一区三区| 好吊一区二区三区视频| 91av在线网址观看| 人妻斩43r熟女人妻| 国内偷拍视频在线观看| 中年美熟妇与少年的激情| 日韩激情又爽aaaaa级| 97人妻少妇熟女av| 精品黄色一级久久久久久久久| 亚洲第一中文视频 | 人妻女教师的沦陷大明| 国产人妖综合在线视频| 中文字幕中文字幕一区三区| 成年免费毛片视频不卡| 中文av字幕在线观看| 日韩欧美亚洲第五页| 免费观看黄片视频91| 97超碰在线中文字幕精品| 亚洲熟女乱色综合小说| 亚洲久久久久久久久| 大香蕉av动作片在线观看| 狠狠躁夜夜躁人人爽天天BL| 黑人巨大欧美一区二区视频| av在线免费一区二区| 蜜桃人妻av2023| 香蕉视频免费看国产精品| 国产精品视频成人在线观看| 亚洲大胆综合在线观看| 精品少妇人妻av免费麻豆| 91桃色午夜福利视频| 啊!用力操我!好爽| 午夜动漫福利在线观看| 在线观看免费精品一区| 亚洲va欧美va国产综合久久| 亚洲91色精品一区二区| 4438x视频在线| 亚洲女人毛毛多毛耸耸| 男女边摸边吃奶边做视频免费看 | 伊人激情综合视频网| 中国黄页毛片免费视频| 中文字幕人妻不卡久久| 国产在线免费av观看| 大鸡吧淫水四射视频| 色婷婷综合欧美日韩亚洲| 熟妇av一区二区三区| 日韩一二三区免费播放视频| 精品成人一区二区三区四区影视| 男女啪啪自拍露脸视频| 嫩草伊人久久精品少妇av网站| av大片免费观看网站| 亚洲女子4x100米接力决赛| 亚洲国产成人精品久久久久久久久| 成人教育av在线网站| 大香蕉红杏在线观看| 国产亚洲精品视频久久久| 狠狠干在线视频观看| 青青操一区二区三区| 欧美日韩精品免费看| 国产97在线观看视频| 亚洲熟女国产午夜精品| av在线免费观看一区| 17c日韩在线观看| 日本一区二区伦理在线观看| 国产av一区二区最新精品| 91精品国语对白人妻刺激使劲| 蜜臀国产精品久久久久久| 丰满的人妻免费在线观看| 女高中生第一次破苞av| 精品日产一匹二匹三匹四匹五匹| 在线观看麻豆免费视频| 蜜桃精品www视频在线观看| 亚洲一级精品久久久蜜桃| 日本欧美视频免费观看| 日韩中文字幕一级乱码在线亚洲| 熟女人妻伊人蜜桃视频| 伊人婷婷视频在线观看| 91精品国产99久久| 国内老熟妇精品露脸视频| 亚洲插美女综合av| 亚洲va欧美va人人爽2| 天天看天天舔天天摸| 欧美亚洲 自拍偷拍| 黄免费在线观看视频| 欧美黑人一级性视频| 国产av剧情网址大全| av色伊人久久综合一区二区| 国产 精品 日韩 人妻| 9l视频自拍九色9l视频不卡| 又大又黄又粗又爽少妇毛片| 欧美一区二区三区视频在线观看| 亚洲清纯国产com| 91精品丝袜人妻久久久久久| xxxxxx日本少妇| 偷拍亚洲图片欧美另类| 51成人看片免费软件| 亚洲精品乱码久久久久99| 视频二区视频四区中文| av色伊人久久综合一区二区| 99精品在线免费观看| 97人人添人躁人人爽超碰| 日本超清有码在线观看| 亚洲va欧美va国产综合久久| 亚洲狠狠婷婷久久综合| 91精选一区二区三区四区| 99热在线都是精品免费| 人妻出轨av中文字幕| 国产精选黄片免费观看| 可以免费看黄色的网址| 日韩夫妻性生活视频在线观看免费| 日本老熟女人体艺术| 91日本av在线观看| 国产免费人妻人伦精品| 国产日日夜夜精品视频免费| 成人免费xxxx在线| 这里只有精品99视频| 2025中文字幕在线| 沈惊觉白小小免费看全集| 日本99精品一区二区三区| 久久久久久久久91精品视频| 欧美亚洲国产激情在线| 99国产精品视频播放| 91免费免费观看在线| 经典视频一区二区三区| 都市激情亚洲春色男人皇宫| 亚洲一级中文字黄色片| 日韩一级黄色片免费在线观看| 日本乱理三级在线观影视频| 日韩av在线免费观看中文字幕| v888av精品少妇| 最新69视频在线观看| 午夜动漫福利在线观看| 最近的中文字幕一区二区| 一区二区三区精品久久人妻| 最近免费中文字幕日韩| 欧美国产亚洲自拍偷拍| 一本v亚洲v天堂一区二区| 亚洲午夜短视频在线| 丰满人妻一区二区三区免费视频棣| 日本丰满老熟妇bbw| 日本一区二区三区综合网| 在线不卡无毒你懂得| 男人的j插进女人的逼| 91桃色午夜福利视频| 日本精品一区二区三区不卡| 精品国产伦理片1区2区| 国产在线免费av观看| 国内人妻自拍视频在线| 青青青久免费在线视频| 天天日天天干天天啪天天射| 色尼玛图片亚洲综合| 亚洲欧美日本高清在线观看| 91久久精品视频地址| 国产又长又粗又硬又爽免费视频| 国产老妇女免费视频| 91精品久久久久久久免费看| 成人网视频欧美在线观看| 欧美亚洲综合另类清纯自拍 | 国产亚洲精品免费观看| 男女啪啪视频免费国产| 嗯啊好想要插我视频| 久久久久久久久91精品视频| 亚洲黄色小视频网址| 成年永久免费播放平台| 久久永久免费专区人妻| 都市激情亚洲春色男人皇宫| 亚洲国产精品久久久久秋霞1 | 中文字幕在线精品的视频| 亚洲欧洲久久av日日更新| 成年人在线观看福利视频| 经典视频一区二区三区| 久久久久久久久91精品视频| 亚洲精品中文字幕原千岁| 91高清免费在线播放| 欧美亚洲国产激情在线| 免费一级特黄特色大片88av| 天天干天天干天天操天天日| av制服国产丝袜黑丝网站| 日本亚洲综合伊人久久| 青青国产的视频在线播放| 333kkkk·com99久久| 中文字幕 av 在线| 亚洲视频资源在线播放| 成年永久免费播放平台| 午夜美女直播福利视频| 精品少妇在线观看视频| 97视频免费观看一区| 欧美 国产 一区二区三区| 大香蕉免费在线伊人| 瑟瑟免费在线观看视频| 午夜动漫福利在线观看| 老太熟妇乱淫aaaaa片免费| 中文字幕 av 在线| 伊人成人综合小说网| 999精品视频免费看| 国产成人自拍精品在线| av蜜臀免费在线观看| 国产午夜精品一区二区不| 色老汉av一区二区三区| 日本欧美黄色网站免费| 色综合人妻中文字幕| 紫川动漫在线观看免费完整版| 日本最新区免费中文字幕| 超碰在线97观看国产| 午夜伦理在线在线观看视频| 另类激情国产专区在线观看免费| 久久日99久久里面有精品| 日本一区二区亚洲综合| 强d乱码中文字幕熟女导航| 青青色国产在线视频网站| 自由的成熟女性色视频| 丰满女人的毛片久久久久久| 一区二区三区精品久久人妻| 韩国电影年轻的妈妈7| 国产精品一级片免费看| 老太熟妇乱淫aaaaa片免费| 99精品一区在线观看| 成年人免费视频网站在线播放| 小少妇久久久久久久| 老头插进去好多水'视频| 最新久久久久久久久久久| 最新黄色天堂av在线资源| av色综合久久天堂av…| 青青草手机免费在线视频 | 欧美日韩中文国产一区| 在线观看中文字幕91| 国产精品美女久久久久av精| 91瑟瑟视频在线观看| 国产无套水多大学生性色AV| 精品一区二区三区最新| 蜜桃黄视频在线观看| 日本最新区免费中文字幕| 亚洲在线视频一区二区| 日日av拍夜夜添久久免费老牛| 亚洲精品乱码久久久久99| 久久av四色米奇影视| 老司机福利社免费视频| 成人av泽村在线播放| 强伦轩人妻一区二区三| 宾馆偷拍一区二区三区| 大香线蕉视频在线观看75| 亚洲黄色片免费在线| 18视频在线免费播放| 黄片一级黄片一级黄片| 成人在线中文字幕日韩| 日韩激情小说在线播放| 中文字幕中文字幕在线一区 | 国产亚洲精品137片内射| japanese国产在线播放| 成人av在线播放老熟妇| 青青草原精品资源站| 人妻少妇久久中文字幕密拍| 九一欧洲国产无码在线| 极品美女少妇高潮喷水| 午夜狠狠干在线视频| 九色视频在线观看网址| 精品国精品国自产在产国产| 91精品国语对白人妻刺激使劲| 蜜臀av在线观看一区| 久久热免费在线观看视频| aaa夜夜夜精品视频| 美女福利在线免费观看| 麻豆电影国产一区在线观看| 一本久道久久综合狠狠躁| 少妇视频播放在线播放免费观看| 一区二区性视频在线观看| 裸体一区二区三区av| 青青草手机免费在线视频| 亚洲大胆综合在线观看| 激情视频国产在线免费观看| 中文字幕丰满人妻fsdss| 欧美成在线在线视频| 国内老熟妇精品露脸视频| 国产高清精品福利私拍国产写真| 韩国三级国产精品一区| 免费在线一区二区视频| 人妻ol未亡人中文字幕| 亚洲综合精品天堂丁香芒果| 亚洲综合一区二区在线视频| 日本一区二区三区高清在线| 亚洲综合在线蜜臀av| 国产呻吟揉丰满一区三六区| 欧美日韩黄色aaa| 97久久超碰成人精品网页91| 欧美日韩国产免费福利| 91精品视频在线观看999| 91久久精品视频地址| 在线看不卡日本av| 爱妃视频av一区二区| 五月天丁香婷婷国产精品| 成人av黄片免费在线观看专区| 亚洲国产欧美日韩综合| 午夜小视频 在线观看| 欧洲亚洲国产永久精品| 初撮日本五十路人妻| 日日夜夜精品视频观看| 女友97年白嫩漂亮在线看| 五月婷婷丁香中文字幕亚洲一区| 色yeye香蕉人妻凹凸一区二区| 尤物在线免费视频观看| 国产大全视频在线观看| 欧美裸体xxxxx极品少妇| 成人涩涩小片视频日本| 亚洲天堂中文字幕手机在线| 国产精品制服诱惑丝袜的| 日日夜夜草日日夜夜干| 欧美黄色网黄色欧美网| 国产高清欧美日韩精品| 久久ri精品诱惑日韩| 久久久久久久岛国免费播放| 日本太黄视频免费看| 蜜桃视频app网站入口| 国产精成人品一区久图片| 午夜激情片免费在线观看| 超级黄的有肉视频在线观看| 在线不卡无毒你懂得| 亚洲mv在线免费观看| 97香蕉在线17c| 在线观看中文字幕91| 欧美日韩一区二区a∨视频| 日韩欧美在线综合网高清| 91精品丝袜人妻久久久久久| 东京一区二区三区av在线| 欧美的一区二区三区| 国产一区二区三区在线资源| 欧美一区二区三区高清视频| 天天透天天插天天日| 国产老女人av一区二区三区| 亚洲av综合在线观看免费| 网友自拍+人妻丝袜+制服诱惑| 国内自拍偷拍视频第一页| 大香蕉久久久久久久久| 日韩在线网站一区二区三区| 91精品国产99久久| av完整版在线播放| 9l视频自拍九色9l视频不卡| 国产成年女人在线观看| 日韩中文字幕一级乱码在线亚洲| 狠狠操视频在线免费观看| 国产一区二区三区黄片欧美| 69久久夜色精品国产69| 2020最新中文字幕在线| 啊啊啊啊啊鸡巴进小穴了视频| 五月天中文字幕亚洲| 欧美日韩性生活视频在线| 午夜福利92一区二区三区久久| 欧美国产一区二区三区| 三级黄色在线播放网站| 亚洲激情四射在线观看视频| 国产免费av天堂蘑菇视频| 中文字幕超碰18区| 在线观看中文字幕91| av蜜臀免费在线观看| 在线视频 中文字幕 一区二区| JK白丝喷白嫩嫩久久久| 成人欧美久久久久美婷婷| 精品国产污污污免费网站入口| 日本国产一区二区三区视频| 欧美极品少妇αv另类| 人妻出轨av中文字幕| 国产不卡剧情在线观看| 裸体一区二区三区av| 亚洲va欧美va国产综合定档| 日本亚洲综合伊人久久| 免费观看在线黄色大片| 手机视频免费在线观看| 狠狠操视频在线免费观看| 熟女俱乐部五十路 六十路| 天天日,天天干,天天舔| 亚洲欧洲久久av日日更新| 91九色p精品久久久| 精华液一区二区区别| 欧美猛少妇色xxxxxhd| 日韩夫妻性生活视频在线观看免费| 国产精品v欧美精品v亚洲精品| 欧美性感美女高潮视频| 好大好粗好爽好黄c黄片| 三级大尺度无码视频| 最近2019日本中文字幕| 国产av剧情网址大全| 日本老熟女人体艺术| 激情黄色激情综合久久| 日韩毛片在线观看网站| 一区二区三区视频直播| 狠狠添狠狠添狠狠添免费出高潮水| 日本精品一区二区三区不卡| 国产免费av天堂蘑菇视频| 中文字幕成熟丰满人妻| 中文字幕 亚洲轻轻av| 国产三级在线一区二区三区| 日本老熟女人体艺术| 大鸡吧淫水四射视频| 欧美亚洲 自拍偷拍| 3p人妻一区二区三区| 亚洲情色成人一二三区| 99精品国产中文字幕| 玩弄人妻少妇精品视频在线| 午夜高清在线观看免费| 99精品久久久久久噜噜| 欧美的一区二区三区| 中文字幕av影片免费在线观看| 91精品免费在线播放| 九色视频在线观看网址| 天天玩天天摸天天舔| 日本aaaaa特黄| 久久久三级高清免费| 少妇丰满一区一二区视频社区 | 欧美一区二区三区高清视频| 94老司机福利社精品视频| 国产亚洲精品免费观看| 男女啪啪自拍露脸视频| 亚洲国产香蕉碰碰人人| 午夜美女操逼高潮免费视频 | 宾馆偷拍一区二区三区| 久久精品aⅴ无码中文字字幕蜜桃| 欧美成人中文字幕在线视频| 麻豆精品传媒在线播放| 69久久夜色精品国产69| 2021久久国自产拍精品| 9l视频自拍九色9l视频不卡| 国产精品网站一区在线观看| 国产综合欧美日韩在线观看| 极品美女少妇高潮喷水| 被大鸡吧操骚B真爽视频| 人妻视频在线免费观看| 精品人妻人人做人碰人人爽| 一级黄色片特级黄色片| 可以免费看黄色的网址| 亚洲精品午夜福利久久| 欧美视频免费在线看| 亚洲激情四射在线观看视频| 丰满老熟女av在线| 日日av拍夜夜添久久免费老牛| 午夜狠狠干在线视频| 国产加勒比精品蜜臀在线观看| 天天日天天操天天干天天舔天天射| 久久久精品欧美一区二| 亚洲情色成人精品视频| 亚洲一级中文字黄色片| 免费在线观看成人激情视频| 中文av字幕在线观看| 亚洲在线视频一区二区| 亚洲熟女乱色综合小说| 人妻少妇精品视频专区专区| 亚洲国产成人精品久久久久久久久 | 国产无套水多大学生性色AV| 97人人添人躁人人爽超碰| 女友97年白嫩漂亮在线看| 亚洲国产av自拍网站| 伊人激情综合视频网| 99久久国产综合精品五月天| 熟女视频一区二区在线观看| 中文字幕亚洲天堂av在线| 亚洲 自拍 色综合图区av| 日韩一二三区免费播放视频| 日本性生活视频观看免费| av在线免费观看一区| 免费观看亚洲女同性恋一区二区| av制服国产丝袜黑丝网站| 欧美亚洲国产激情在线| 国产精品视频中文无码| 超级碰免费人妻97| 天天日天天爱天天玩| 国产97在线观看视频| av完整版在线播放| 国产精品8888在线观看| 免费观看黄片视频91| 黑人中出日本人妻系列| 99精品国产九九国产精品| 91精品一区二区三区蜜桃| 熟妇高潮喷水在线120p| 在线看国产91av| av在线免费观看一区| 国产 欧美 五月 激情| 2017夜夜操天天操| 夜夜躁爽日日躁狠狠躁一区| 青青日常在线免费观看| 国产伦精品一区二区三区妓国产 | 鲁久久无码五月天有码| 333kkkk·com99久久| 老头插进去好多水'视频| 免费在线一区二区视频| 亚洲欧洲日韩av专区| 精品suv一区二区33| 又粗又硬又黄又色的| 欧洲亚洲国产永久精品| 成人欧美网站免费直接看| 国产美女在线极品美女网站 | 日本亚洲综合伊人久久| 在线观看国产区一区二| 69久久夜色精品国产69| 一级特黄夫妻生活大片| 日韩三级 欧美精品| 在线播放__91色| 日韩三级 欧美精品| 午夜福利伦理片在线观看| 亚洲国产伦理久久精品| 亚洲欧美专区一区二区三区| 大伊香蕉精品一区视频在线| 黄色小网站在线免费观看| 欧美日韩黄色aaa| 久久综合精品五月天| 性美女毛片久久a区| 亚洲国产精品午夜福利久久| 一区二区三区四区蜜桃在线| 天天摸天天天天日少妇av| 亚洲天堂男人天堂中文字幕| 天堂av2025一区| 中文字幕第一区高清av| 北岛玲在线播放中文字幕| 亚洲专区 欧美日韩| 一本v亚洲v天堂一区二区| 日韩免费一卡二卡三卡四卡五卡| av亚洲欧美一区二区| 国产婷婷色一区二区三区| 色尼玛图片亚洲综合| 国产精品蜜臀在线观看| 99999精品视频在线观看| 免费观看黄色视频啊小穴啊| 白丝骚逼美女被操到逼水直流| 亚洲一级中文字黄色片| 久久综合精品五月天| 一级视频在线观看高清国产免费| 99久久无色码中文字幕免费| 1234中文字幕内射在线| gogo大尺度二区三区| 人妻在线一区二区三区| 97人人澡人人添人人爽| 久久久亚洲av成人网人人| av在线免费观看一区| 亚洲美女福利视频免费| 亚洲黄色小视频网址| 伊人网av在线观看| 国产91色婷婷手机在线| 欲色天天网综合久久| 在线看不卡日本av| 欧美熟妇激情在线观看| 啪啪啪在线观看免费视频| 亚洲免费不卡一区二区三区| 中文字幕一区二区三区四区五区人 | 人妻少妇精品视中文字幕国语| 天天爽天天爽免费视频| 天天透天天插天天日| 99热精品夜夜爽伊人| 国产小视频在线播放| caopron在线成人免费| 一区二区三区日韩高清| 五十六十日本老熟妇牲| 91精品免费在线播放| 成年永久免费播放平台| 亚洲国产精品日韩综合网| 五月天丁香婷婷国产精品| 视频一区二区在线观看视频| 极品美女少妇高潮喷水| 中文字幕亚洲精品八区| 日韩黄色a影视在线免费观看网站 日本久久久久久久久人妻视频 | 青青青久免费在线视频| 2021久久国自产拍精品| 亚洲综合一区二区在线视频| 男人的鸡插入美女的小穴| 国产亚洲av网址大全| 亚洲地址一区二区三区四区| 人妻熟女中文字幕电影| 亚洲国产综合精品中文字幕| 久久精品国产亚洲av四区| 久9热精品视频在线播放| 国产精品免费观看av| 日韩激情又爽aaaaa级| 推荐国产福利一区二区三区| av大片免费观看网站| 欧美裸体xxxxx极品少妇| 亚洲天堂av在线免费看| 亚洲熟女国产午夜精品| 亚洲av乱码一区二区三区观影| 韩国三级国产精品一区| 一区二区三区免费精品| 美日韩黄色一级视频| 我的嫂子伦理片在线观看| 91九色黑丝长腿美女| 伊人婷婷视频在线观看| 男人插女人阴穴的视频| 中文字幕日韩一二区| 黑人久久一区二区三区| 天天日天天干天天啪天天射| 青娱乐休闲在线观看视频| av大片免费观看网站| 中文字幕在线观看操穴视频| 人鱼小姐在线观看国语版字幕| 91精品在线观看视频| 538精品视频国产| 日本国产一区二区精品| 亚洲熟女少妇 精品| 五月天中文字幕亚洲| 裸体一区二区三区av| av在线视频观看免费| 国产老头视频在线观看| 午夜dj在线观看免费完整视频| 日韩一区=区三区四区| 老窝鸭av一区二区三区| 漂亮人妻口爆深喉免费视频| 宾馆偷拍一区二区三区| 少妇18禁久久yy| 密乳一区二区三区国产亚洲av| 在线视频 中文字幕 一区二区| 亚洲av乱码一区二区三区四区| 国产熟女福利资源导航| 少妇丰满一区一二区视频社区| 青青草国产免费在线观看| 久久人人添人人爽添人人片va| 青青国产成人在线看| 国产在线观看av专区| 日韩亚洲欧美中文在线电影| 久久精品亚洲一区二区三| 啊!用力操我!好爽| 亚洲一区二区日韩欧美久久| 亚洲91精选一区二区在线| 日韩不卡免费一区二区三区视频| 91极品尤物国产在线播放| 大香蕉伊人久久在线观看| 男生殖器插女生殖器视频欧美| 日本久道久久综合狠狠老| 97人人澡人人添人人爽| 天堂av在线一区少妇| 中文字幕人妻不卡久久| 色屁屁一区二区三区视频国产| www人妻一区二区| 不戴胸罩的人妻电影| 91日本av在线观看| 日日夜夜精品视频观看| av精品一区二区三区免费观看| 人人爽人人爽人人妻| 国产免费av天堂蘑菇视频| 人妻出轨av中文字幕| 国产免费人妻人伦精品| 操的少妇嗷嗷叫视频| 91精品国语对白人妻刺激使劲| 好吊一区二区三区视频| 亚洲国产精品久久久久秋霞1| 人妻少妇久久中文字幕密拍| 国产一级久久久久高清版| 三级大尺度无码视频| 欧美日韩精品免费看| 插美女阴道流水视频| 人妻中文字幕影音先锋| 可以免费看黄色的网址| 最新久久久久久久久久久| 日本一道免费一二三区| 日韩欧美在线综合网高清| av大片免费观看网站| 操的少妇嗷嗷叫视频| 天天爽天天爽免费视频| 亲爱的请你原谅我 中文字幕| 欧美成人免费观看在线看| 国产主播av在线观看| 亚洲人妻无吗中文字幕| 亚洲精品久久中文字幕| 色狠狠久久vs北条麻妃av| 蜜桃视频app网站入口| 午夜无码精品一区二区三区| 精品人妻一区二区三区18p| 熟妇高潮喷水在线120p| 国产视频在线观看一区二区极品| 欧美视频一区二区三区三州| 亚洲欧美清纯另类图片小说| 伊人网av在线观看| 大香线蕉视频在线观看75| 日韩不卡免费一区二区三区视频| 中文字幕中文字幕在线一区| 北岛玲精品一区二区三| 五月天中文字幕亚洲| 尹人香蕉综合网在线观看| 国产午夜在线观看不卡 | 丝袜美腿av一区二区| 粗大挺进朋友人妻身体里国产| 综合日韩人妻一区二区三区| 婷婷热re99久久精品国产| 爱妃视频av一区二区| AV成人国产免费久久精品| 免费国产一区二区三区在线播放| 亚洲av综合在线观看免费| 亚洲欧美熟妇另类久久久久久| 99偷拍精品一区二区| 国产在线精品免费视频| 在线观看麻豆免费视频| 字幕人妻一区二区视频| 中文字幕一区二区720p| 国产交换乱淫99视频| 把鸡鸡伸进去的视频| 亚洲69视频在线观看| 一区二区三区四区无人区| 日本国产一区二区三区视频| 欧美三级不卡不毒视频| 成人区人妻精品一区二区不卡蜜臀| 久久精品aⅴ无码中文字字幕蜜桃 中文字幕丝袜人妻乱一区三区 | 成年免费毛片视频不卡| 久久久久一区二区三区四区| 啪啪啪1000国产精品| 午夜激情片免费在线观看| 午夜小视频免费在线| 久久永久免费专区人妻| 精品视频在线观看剧情| 国产主播av在线观看| 中文亚洲字幕国产剧情| 欧美猛少妇色xxxxxhd| 一色桃子av人妻熟女完整版| 男人的j插进女人的逼| 老熟妇乱一区二区三区| 午夜高清在线观看免费| 无码大荫蒂视频在线| 亚洲精品av成人在线观看| 日韩中文字幕色资源| 男人操女人逼视频免费| 91福利在线观看免费| 97超碰人人澡香蕉| 久久精品乱码中文字幕| 紫川动漫在线观看免费完整版 | 中国精品视频在线观看一区二区| 北条麻妃超碰av在线播放| 国产视频在线观看一区二区极品 | 三级视频欧美视频亚洲视频| 中文字幕av一区二区三区不卡 | 2021国产麻豆剧传媒精品入口| 久久中文字幕永久第一页| 中文字幕人妻二区三区免费视频| 国产一级免费观看av网站| 欧美日韩国产免费福利| 91在线精品一区二区毛片| 中文字幕亚洲情色在线观看| 亚洲一区二区蜜乳av| 色综合天天综合网天天狠天| 亚洲国产综合精品中文字幕| 美女厕所撒尿偷拍视频| 黄色片在线免费观看日韩不卡| 色屁屁一区二区三区视频国产| 亚洲精品午夜福利久久| 性色av不卡一区二区三区| 天堂av在线男女av| 国语自产精品视频在线看一大j8| av一区二区在线播放色婷婷精品| av熟女乱一区二区三区| 动漫卡通一区二区三区| 国产自拍福利视频在线观看| 男人插女人动漫视频| 国产av在线播放免费| 美女很黄很色国产av| 亚洲人妻一区二区三区久久精品| 91精品综合一区二区三区| 欧美的一区二区三区| 亚洲天堂av在线免费看| 少妇性感美女一区二区三区四区| 18免费1000视频国产 | 国产在线成人精选视频| 中文字幕一区二区三区四区五区人| 欧美日本一区二区三区精品| 日本道高清免费在线视频| 色老汉av一区二区三区| 国产日韩欧美高清无网码| 全国最大成人 中文字幕| 日本国产精品第一页久久| 91新视频在线免费观看| 99久久99久久综合| 亚洲图片av伦理三级| 91精品一区二区三区蜜桃| 美女厕所撒尿偷拍视频| xxxxxx日本少妇| 精区一品二品精区在线91| 日本二区三区精品免费| 啪啪啪啪一区二区三区四区三级片 | 免费在线一区二区视频| 少妇人妻肉欲短视频| 激情啪啪理论片中文字幕| 国产在线观看av专区| 欧美日本一区二区三区在线观看 | 亚洲 欧美视频在线| 精品国产精品国产免费| 色婷婷综合久久久久中文一区二区 | kendralust熟女少妇| 又大又黄又粗又爽少妇毛片| 亚洲av狠狠的爱一区二区| 免费观看日本伦理片| 无码大荫蒂视频在线| 久久久亚洲av成人网人人| 露臀裙后入在线视频| 18免费1000视频国产| 国产免费自拍视频精选| 国产主播精品在线一区| 中文字幕乱码熟女人妻水蜜桃| 亚洲av无日韩毛片久久| www国产精品人妻| 日本老熟女人体艺术| 成人在线视频日韩国产| 91人妻porny精品国产| 亚洲精品久久中文字幕| 亚洲图片av伦理三级| 91九色黑丝长腿美女| 亚洲熟妇少妇一区二区| 国产自拍福利视频在线观看| 99青青草原在线视频| 亚洲国产成人久久无码| 丝袜美腿一区二区三区jk| 午夜高清在线观看免费| 尤物在线免费视频观看| 日本熟妇三十熟女精品区| 国产剧情传媒av在线| 中文字幕在线aⅴ免费观看| 免费一级特黄特色黄录像| 国产美女视频网久久69| 广州最大的成人免费视频| 日本高清一级二级三级| 成人av泽村在线播放| 日本午夜色视频在线观看| 人妻熟女中文字幕电影| 97 在线观看视频网站| 91久久久人妻精品一区二区| 日韩精品久久日日躁夜夜躁| 国产名人亚洲视频中文字幕| 欧美成在线在线视频| 17c久久精品国产亚洲av蜜柚| 国内老熟妇精品露脸视频| 全国最大成人 中文字幕| 中文字幕一区二区三区人妻| 成年大片免费视频播放二级| 麻豆免费成人小视频| 日韩中文字幕色资源| 日韩精品免费人成视频| 日韩午夜福利三级经典| 日韩黄色a影视在线免费观看网站 日本久久久久久久久人妻视频 | 日本成年人大片免费观看| 欧美码一二三区线观看| 黄片激情视频国产免费| 91九色在线视频播放| 精华液一区二区区别| 成人av网站在线观看| 国产三级中文字幕av| 亚洲情色欧美日韩在线| 麻豆免费成人小视频| 操的少妇嗷嗷叫视频| 四季av在线一区二区三区| 啪啪啪啪啪啪啪在线观看| 18视频在线免费播放| 国产精品自产拍在线观| 亚洲在线视频一区二区| 全国av一卡二卡三卡免费| av在线免费一区二区| 蜜臀av在线观看一区| 成人av黄片免费在线观看专区 | japanese国产在线播放| 97视频免费观看一区| 男人插女人逼视频播放| 久9热精品视频在线播放| 真实国产乱子伦一区| 久9热精品视频在线播放| 久久热高清在线观看| 中文字幕在线观看观看av?| 91在线观看青青超碰| 亚洲成电影在线观看青青 | 白丝大胸美女操批内射视频| 日韩一区=区三区四区| 国产原创成人激情在线| 动漫卡通一区二区三区| 免费国产一区二区三区在线播放| 国产精品久久久久久无码不卡| 午夜一分钟视频免费在线观看| 黑人玩弄,人妻,一区二区三区| 婷婷色在线免费视频| 亚洲91精选一区二区在线| 国内自拍偷拍视频第一页| 夜夜躁爽日日躁狠狠躁一区| 看国产剧的免费软件| 美女精品一区二区三区| 日韩妹子精品视频在线观看| 午夜少妇成人人妻av| 免费av在线亚洲精品| 成年人免费视频网站在线播放| 亚洲第一视频在线视频| 欲求不满的邻居人妻一区二区三区| 九九热线这里只有精品| aaa夜夜夜精品视频| 国产人妖综合在线视频| 日本精品一区二区三区四区| 欧美黑人一级性视频| 17夜人妻人人澡人妻| 日韩午夜福利三级经典| 亚洲插美女综合av| 天天操日日干夜夜操| 91popny熟女九色| 老头插进去好多水'视频| 精品久久久久久无码中文野结衣| 亚洲第二页欧美视频| 日韩亚洲欧美中文在线电影 | 亚洲av高清一区二区三区色| 亚洲一点不卡福利视频| 青青久在线观看免费视频| 一区二区三区四区无人区| 精品在线观看一区二区视频| 亚洲va欧美va国产综合定档| 欧美色视频日本片免费看| gogo大尺度二区三区| 精品少妇在线观看视频| 黄色av观看一区二区三区| 最新国产剧情在线一区| 日本太黄视频免费看| 一区二区三区四区蜜桃在线| 中文字幕av一区二区三区不卡| 成人av中文字幕网址| 啪啪啪啪啪啪啪啪啪日本| 黄片一级黄片一级黄片| 国产精品一线二线三区| 国产97精品在线免费看| 日韩夫妻性生活视频在线观看免费 | 免费午夜在线看福利片| www精品一区二区三区| 3p人妻一区二区三区| 男女啪啪视频免费国产| 免费观看亚洲欧洲在线视频| 99精品午夜一区二区三区| 在线观看麻豆免费视频| 2020最新中文字幕在线| 最近免费中文字幕日韩| 亚洲码欧洲码在线观看| 激情91久久婷婷综合| 欧美的一区二区三区| 亚洲av免费观看网站在线观看| 亚洲欧洲日韩av专区| 美女摸自己下面出白浆的视频| 91麻豆精品国产综合久久久主演| 国产午夜在线观看不卡 | 视频一区二区在线观看视频| av自拍偷拍一区二区| 99国产精品视频播放| 啪啪啪啪一区二区三区四区三级片| 在线免费观看国产欧美日韩| 日韩激情又爽aaaaa级| 大香蕉av动作片在线观看| 欧美午夜免费福利视频| 亚洲日韩色欧另类欧美色吊丝| 94老司机福利社精品视频| 放荡的丝袜美腿护士老师| 国产精品蜜臀在线观看| 国产精品综合自拍第一页| 成人av在线国产精品| 九九re热这里只有精品视频| 啪啪啪啪啪啪啪啪啪日本| 青草神马视频在线网址| 日日夜夜草日日夜夜干| 999精品欧美一区二区三区黑人| 天天草天天日天天舔| 天天综合网精品视频天天看| 日本欧美在线免费观看视频| 91九色成人原创视频| 视频一区 欧美情色| 91日本av在线观看| 亚洲国产伦理久久精品| 中文字幕日产av一二三区| 清纯国模自拍视频在线观看| 裸体一区二区三区av| 国产亚洲精品137片内射| 欧美亚洲日产国产综合| 精品中文字幕高清久久久久三级| 亚洲校园~春色综合| 日本丰满少妇毛茸茸| 中文字幕激情亚洲精品| 国产青青自拍视频在线观看看| 国产av电影网毛片| 亚洲免费在线观看,| 中文字幕+乱码+中文| av中文字幕巨乳人妻| 国产精品亚洲av国产| 国产男女激情视频一区| 亚洲一区二区婷婷久久| 9网网站免费看nb国产| 国产av电影网站一区| 亚洲精品中文字幕原千岁| caopron在线成人免费| 久久久亚洲av成人网人人| 国产剧情传媒av在线| 亚洲 自拍 色综合图区av网站| 粉嫩玉足夹茎视频在线看| 亚洲和黑人特黄色片| av色伊人久久综合一区二区| 亚洲国产精品日韩综合网| 亚洲一区二区嗯好爽快点| 欧美老熟妇在线一区二区三区| 91极品尤物国产在线播放| 精品视频在线观看剧情| 蜜桃人妻av2023| 性色蜜月av一区二区三区| 大香蕉在线福利导航| 欧美码一二三区线观看| 日本成人av在线免费看 | 久久人人添人人爽添人人片va| 亚洲激情四射在线观看视频| 人妻熟女中文字幕电影| 9l视频自拍蝌蚪9l成人熟妇| 一区二区啪视频在线观看| chinese熟女熟妇1老熟妇| 亚洲一区二区日韩欧美久久 | 欧美亚洲国产第一二区| 精品人妻一区二区三区18p| 熟女成人国产精品视频| 亚洲国产成人久久无码| 老鸭窝最新在线视频| 国产av一区二区最新精品| 中文一区二区在线播放| 性色av一区二区三区咪爱四| 好好的日com中文视频| 九九热在线视频观看最新| 欧美人妖一区二区三区| 玩儿女人操逼大片儿| 沈惊觉白小小免费看全集| 2021久久国自产拍精品| 青青操一区二区三区| youjizzcom精品少妇| 性色av不卡一区二区三区 | v888av精品少妇| 天天插天天干天天爽| 日本高清一级二级三级| 日本人妻偷人妻中文字幕| xxx一区二区三区在线观看| 亚洲一区二区三区在线直播| 91九色在线视频入口| 182tv免费福利中文字幕| 亚洲黄片在线免费播放| 日韩夫妻性生活视频在线观看免费| 天天玩天天摸天天舔| 超碰97人妻中文字幕| 免费在线观看成人激情视频| 亚洲第二页欧美视频| 把鸡鸡伸进去的视频| 插屁眼在线免费视频| 欧洲av网址在线观看| 亚洲69视频在线观看| 吃大咪咪操骚逼高清视频| 性色av一区二区三区咪爱四| 国产精品久久久久久电| 女同性ⅹxx女同hd偷拍| 揉老熟女老熟妇aaa| 日本激情床震无遮掩视频 | 操骚逼啊啊啊叫一区二区三区| 不戴胸罩的人妻电影| 精品人妻天天爽夜夜爽| www国产精品人妻| 免费一级特黄特色黄录像| 免费国产一区二区三区在线播放| 男女上下差差发哈插插插| 色婷婷综合久久久久中文一区二区 |