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 91热精品视频在线播放| 91精品久久一区二区| 亚洲天堂av影视在线| 91最新资源在线观看| 午夜狠狠干在线视频| 秋霞网av一区二区三区中文字幕| 亚洲第一视频在线视频| 午夜福利无码一区二区三区| 欧美另类视频第二页| 爱妃视频av一区二区| 欧美亚洲变态另类在线观看| 中文字幕在线观看操穴视频| 人妻少妇精品视中文字幕国语| 国产老头视频在线观看| 精品在线观看一区二区视频| 啪啪啪啪啪啪啪在线观看| 白丝大胸美女操批内射视频| 欧美图区一区二区三区| 特黄特黄的日韩爽大片| 91:久久久久久久久久| 免费观看亚洲欧洲在线视频| 少妇18禁久久yy| 男人把女人桶到爽午夜视频| 国产亚洲精品久久久久久电影| 色综合亚洲一区二区小说性色aⅴ| 日产精品免费一区二区三区| 日本久久久久久久久人妻视频 | 欧美亚洲自拍偷拍xxx| 午夜高清在线观看免费| 天天干天天干天天操天天日 | 9999国产精品免费| 欧美老熟妇在线一区二区三区| 狠狠添狠狠添狠狠添免费出高潮水 | 日本激情床震无遮掩视频| 中文字幕中文字幕在线一区| 日韩一级黄色片免费在线观看| 欧美日韩激情图片视频另类| 亚洲最大第八色在线视频| 日本精品一区二区三区四区| 国产午夜精品在线播放| 日本精品一区二区三区四区| 亚洲天堂国产精品乱伦一区| 少妇人妻肉欲短视频| 三级视频欧美视频亚洲视频| 国产精品亚洲av国产| 亚洲风情 国内自拍av| 国产精品福利视频资源| 成人av在线播放老熟妇| 久久古典武侠第1页777| 黄色的视频黑丝网站| 久久与久久最新视频| 搞黄色的网站在线观看| 久久与久久最新视频| 中文字幕亚洲情色在线观看| 亚洲va欧美va人人爽2| 国产av剧情网址大全| 亚洲av蜜臀在线观看| 天天干天天日少妇网| 男生捅女生逼的免费视频软件| 91黄色大全免费观看| 91av在线网址观看| 国产精品久久性欧美| 黄片网址在线观看视频| 国产精品久久久久久一级精品| 久久人人妻人人做人人爽涩爱| 182tv免费福利中文字幕| 久久人人添人人爽添人人片va| 欧美裸体xxxxx极品少妇| 国产青青自拍视频在线观看看| 91九色在线视频入口| 亚洲成电影在线观看青青 | 欧美视频免费在线看| 精品国产精品国产免费| caoporn中文字幕视频| 好紧好湿好爽好大A视频| 人妻人妻干干干干人妻网站| 天天爱天天插天天射| 99精品国产免费电影| 操骚逼啊啊啊叫一区二区三区| 国产精品大片在线观看网站资源| 亚洲风情 国内自拍av| 日本国产精品第一页久久| 国产成年无码av片在线| 99久久精品岛国免费黄色网| 91超碰在线播放视频| 护士色视频亚洲婷婷| 在线播放三级黄色日韩av| 97超碰在线资源总站| 成人两性色午夜视频免费88AV| 日本伊人中文字幕在线| 激情黄色激情综合久久| 久久97久久97免视看| 日韩专区欧美专区第五页| 中文字幕成熟丰满人妻| 11yyy国产成人综合在线观看| 91九色在线视频播放| 欧美大香蕉一区二区三区| 欧美18vide0sex性极品| 瑟瑟视频在线网站免费观看| 国产老妇女免费视频| 日本性生活视频观看免费| 天天玩天天摸天天舔| 国产精品亚洲av国产| 精品国精品国自产在产国产| 亚洲精品欧美日韩专区免费| 中文字幕av一区二区三区不卡| 亚洲一区二区三区视频免费观看| 超碰国产极品尤物在线| 趣夜视频在线免费观看| 亚洲欧美码免费观看视频| 亚洲最大的中文字幕在线| 国产在线av免费观看| 九色91蝌蚪porn| 青青色国产在线视频网站| 加勒比日本一区二区三区| 国产交换乱淫99视频| 美女叉开腿让男人桶视频| 亚洲一级中文字黄色片| 日本中文字幕第三区| 夜夜躁爽日日躁狠狠躁一区 | 欧美黄色网黄色欧美网| 亚洲欧美综合一区二区三区四区| 一区二区三区水蜜桃视频| 欧美亚洲日产国产综合| 成人教育av在线网站| 免费一级特黄特色黄录像| 日韩级视频在线播放| 美女作污一区二区三区| 一级少妇精品久久久久| 欧美口爆吞精一区二区三区| 制服诱惑,日韩情色| 色姑娘天天干天天操| 亚洲国产精品午夜福利久久| 欧美激情免费观看一区二区| 亚洲综合一区二区在线视频| 中文字幕av影片免费在线观看| 中文字幕人妻丝袜二区av| 有故事情节的美女免费日逼视频| 91黄色大全免费观看| 国产福利小视频在线免费观看| 91大神长腿美女视频在线观看| 亲爱的请你原谅我 中文字幕| 美女作污一区二区三区| 97超碰资源在线播放| 欧美图区一区二区三区| 男人的天堂av 色噜噜| 国产亚洲av网址大全| 欧美国产一级在线免费观看| av一区二区在线播放色婷婷精品| 亚洲中文字幕综合av一区| 人妻人妻干干干干人妻网站| 国产大女露脸自拍大叫| 久久久com久久久com| 人成免费视频一区二区三区| 国产女人AAA级久久久级| 欧美日韩国产免费福利| 宅男视频在线观看视频| a区精品视频在线观看| 亚洲va欧美va人人爽2| 91社区男人都懂的网站| 蜜臀国产精品久久久久久| 欧美日韩黄色aaa| av在线免费观看一区| 91精选国产九色porny| 欧美专区在线观看视频| 91激情视频在线视频| 亚洲综合精品天堂丁香芒果| 日本99精品一区二区三区| 日韩激情又爽aaaaa级| 国产熟女福利资源导航| 亚洲中文有码字幕青青| 91精品免费在线播放| 玩弄人妻少妇精品视频在线| 99精品国产九九国产精品| 国产精品视频自拍一区| 国产在线免费av观看| 一级少妇精品久久久久| 天天爽天天爽免费视频| 亚洲情色成人一二三区| 午夜激情片免费在线观看| 91精品综合一区二区三区| 熟妇av一区二区三区| 丰满的人妻免费在线观看| 青青草手机免费在线视频| 深夜黄色福利网站在线观看| 狠狠添狠狠添狠狠添免费出高潮水 | av亚洲天堂中文字幕| 久久热高清在线观看| 91黄色大全免费观看| 男人的天堂av 色噜噜| 成人av影视一区二区三区| 欧美色高清vvvvvv| 操骚逼啊啊啊叫一区二区三区| av在线免费一区二区| 国产精品网站一区在线观看| av制服国产丝袜黑丝网站| 国内偷拍视频在线观看| 久久久久久久久91精品视频| 99久久热只有国产精品| 青青草手机免费在线视频| 中文字幕久久五月天| 丰满熟妇xxxx性久久久| 中文字幕日产av一二三区| 亚洲无码免费一二三区视频| 亚洲av永久无码精品尤物| caoporn97超碰| 1234中文字幕内射在线| 成人两性色午夜视频免费88AV| 亚洲风情 国内自拍av| 欧美日韩黄色aaa| 好大好粗好爽好黄c黄片| 天天干天天干天天操天天日| 啊啊啊啊在线视频观看| 日本少妇人妻xxxxx16| 午夜一分钟视频免费在线观看| 国产亚洲精品视频久久久| 国产成年无码av片在线| 四房波波-五月天-四房波波| 中文字幕在线精品的视频| 2017夜夜操天天操| 国产精品久久久久久无码不卡| 日本午夜色视频在线观看| 538精品视频国产| 国产一区二区三区黄片欧美| 777精品久久久久久久| 91精品人妻丰满熟妇| 亚洲综合一区二区在线视频| 九九热线这里只有精品| 国产美女在线极品美女网站| 日日躁夜夜躁狠狠躁av蜜臀| 人妻少妇精品视中文字幕国语 | 11yyy国产成人综合在线观看| 在线观看麻豆免费视频 | 中国男人肏女人大屄的视频| 亚洲的国产中文字幕的av| 9网网站免费看nb国产| 国产视频播放一区二区三区| 日本一区二区三区高清在线| 97超碰资源总站在线观看 | 紫川动漫在线观看免费完整版| 啊啊啊啊啊鸡巴进小穴了视频| 人人爱精品人人艹人人干| 韩国三级国产精品一区| 99国产热精品在线观看| 国产伦精品一区二区三区妓国产| 丰满的人妻免费在线观看| 91九色在线视频播放| 色狠狠久久vs北条麻妃av| 9999国产精品免费| 亚洲国产香蕉碰碰人人| 9999国产精品免费| av中文字幕巨乳人妻| 中文字幕av影片免费在线观看| 中文字幕在线观看观看av?| 在线国产小视频麻豆| 美女扒开腿让男人桶网站| 亚洲熟女国产午夜精品| 国产成人18黄网站免费观看| 男人的天堂av成人网| 成人在线视频日韩国产| 日本中文字幕第三区| 免费观看日本伦理片| 日本国产精品第一页久久| 97 在线观看视频网站| 91超碰在线播放视频| 九九热在线视频观看最新| 夜夜躁爽日日躁狠狠躁一区| 欧美午夜理论片1000在线播放| 9999国产精品免费| 成年永久免费播放平台| 日本最新区免费中文字幕| 中文字幕一区二区三区四区五区人| 成年女女子免费视频播放| 精品亚洲永久免费精品网站| 偷怕自拍在线免费观看| 97人人添人躁人人爽超碰| 亚洲男人天堂2025| 少妇18禁久久yy| 免费网站黄色在线观看不卡| 无码伊人久久大杳蕉中文无码| 淫色网亚洲av日韩av| 91久久久人妻精品一区二区| 少妇人妻肉欲短视频| 最新国产剧情在线一区| 黑人中出日本人妻系列| 蓝莓小视频在线观看| 尤物在线免费视频观看| 精品久久久久久无码中文野结衣| 亚洲国产精品午夜福利久久 | 亚洲狠狠婷婷久久综合| 国产免费av天堂蘑菇视频| av蜜臀免费在线观看| 午夜香蕉爽爽爽av| 亚洲国产精品成人综合色| 99久久精品岛国免费黄色网| 欧美精品色呦呦首页| 91成人国产在线观看九色| 天天日,天天干,天天舔| 欧美vide0sde极品另类| 在线播放三级黄色日韩av| 51成人看片免费软件| 日韩人妻无码一区2区3区| 九九re热这里只有精品视频| 91精品视频在线观看999| 台湾性dvd性色av| 亚洲国产成人一区二区久久久| 中文字字幕在线中文乱码2019| 日本不卡视频免费播放| 懂色av蜜臀av绯色| 爱妃视频av一区二区| 欧美一区二区三不卡| 日韩精品久久日日躁夜夜躁| 亚洲另类视频图片小说| 亚洲美女啪啪邪恶视频| 亚洲国产长腿丝袜av天堂| 亚洲国产成人久久无码| 欧美亚洲自拍偷拍xxx| 熟女国产一区二区三区| 精品黄色一级久久久久久久久 | 国产一区二区精品调教| 美女和猛男诱惑操逼捅鸡鸡 | 国产主播在线露脸观看| 老太熟妇乱淫aaaaa片免费| 免费国产一区二区三区在线播放| 中文在线播放一区二区三区| 人妻 日韩 制服 中文 在线| 国产精品v欧美精品v亚洲精品| 久久久精品国产亚洲av水| 欧美大屁股撅起来射精视频| 亚洲综合网男人的天堂| 天天日天天爱天天玩| 漂亮人妻视频免费在线播放| 国产97在线观看视频| 国产亚洲高清在线观看| 久亚洲aⅴ一区二区三区写真| 天天草天天日天天舔| 成人区人妻精品一区二区不卡蜜臀| 亚洲情色欧美日韩在线| 大香蕉太香蕉在线免费看| 日本乱理三级在线观影视频| 91精品国产99久久| 亚洲国产自拍偷拍精品| 久9热精品视频在线播放| 欧美一区二区三区视频在线观看| 亚洲插美女综合av| 美女和猛男诱惑操逼捅鸡鸡| youjizzcom精品少妇| 国产美女在线极品美女网站| 熟女视频一区二区在线观看| 国产一区二区精品调教| 精品久久久久久综合日本欧美| 亚洲av在线观看久久久| 国产主播在线观看一区二区| 日韩中文字幕色资源| caoporn中文字幕视频| 插屁眼在线免费视频| 成人两性色午夜视频免费88AV| 成人教育av在线网站| 91人妻porny精品国产| 中文字幕精品无码一区二区三区| beeg欧美丰满人妻| 九九热在线视频观看最新| 全国最大成人 中文字幕| 国产在线免费av观看| 成人两性色午夜视频免费88AV| 欧洲亚洲国产永久精品| 大香蕉红杏在线观看| 三级大尺度无码视频| av天堂中文版www在线| 国产精品视频自拍一区| 欧美亚洲另类综合网| 女高中生第一次破苞av| 蜜桃精品噜噜噜av| 人妻ol未亡人中文字幕| 男人天堂中文字幕av| 99精品国产九九国产精品| 91超碰在线播放视频| 人妻欧美制服中文字幕| 日本丰满老熟妇bbw| 亚洲第二页欧美视频| 国产成年无码av片在线| 中文字幕激情亚洲精品 | a区精品视频在线观看| 国产97在线观看视频| 色姑娘天天干天天操| 欧美专区在线观看视频| 人妻欲求不满作品番号| 青青操一区二区三区| 91久久人澡人妻天天做天天爽| 啪啪啪啪啪啪啪啪啪日本| 国产高清 国产av| 色少妇精品一区二区三区网站| 欧美一区二区三区视频在线观看 | 久久精品乱码中文字幕| 国产女主播av在线播放观看| 亚洲清纯国产com| 国产精品国三级国产av无密码| 日韩在线网站一区二区三区| 趣夜视频在线免费观看| 大屁股熟女少妇一区二区| 午夜激情片免费在线观看| 国产亚洲高清在线观看| 欧美亚洲另类综合网| 91久久精品视频地址| 欧美三级不卡不毒视频| 一区二区三区高清在线| 17c日韩在线观看| 欧美日韩黄色aaa| 亚洲一级精品久久久蜜桃| 国语自产精品视频在线看一大j8| av在线免费一区二区| 成年免费毛片视频不卡| 91精品青草福利久久午夜| av亚洲欧美一区二区| 国产青青自拍视频在线观看看| 2017在线免费观看中文a| 国产加勒比高清无码在线视频| 国产无套白浆一区二区三区四区 | 老太熟妇乱淫aaaaa片免费| aaa夜夜夜精品视频| 99精品国产九九国产精品| 99热在线都是精品免费| 爱毛片在线成人免费看| 丰满熟妇人妻一区二区三区| 人妻天天爽夜夜爽2区蜜a∨| 自拍偷拍 欧美亚洲| 97超碰在线资源总站| 日本超清有码在线观看| 亚洲精品一区二区三区av| 天天日,天天干,天天舔| 午夜精品婷婷午夜精品| 182tv免费福利中文字幕| 国产精品不卡在线播放| 中文av字幕在线观看| 亚洲精品乱码久久久久99| 丰满人妻一区二区三区免费视频棣| 强d乱码中文字幕熟女导航| 国产精品va在线观看老妇女| 日本激情内射一区二区三区| 久久精品亚洲一区二区三 | 91精品国产在热久久| 加勒比人妻av系列专区| 中文乱码字幕人妻精品| 可以免费看黄色的网址| 忘忧草精品久久久久久久高清| 日韩不卡免费一区二区三区视频 | 黄片一级黄片一级黄片| 国产一区二区三区在线资源| 国产老女人av一区二区三区| 白丝高中生被靠操在观看| 国产精品剧情在线视频| 天天操,天天射,天天日| 成人av黄片免费在线观看专区| 午夜精品久久十八禁| 老窝鸭av一区二区三区| a区精品视频在线观看| 亚洲大胆综合在线观看| 国产老妇女免费视频| 午夜福利无码一区二区三区| 亚洲欧美码免费观看视频| 国产精品剧情在线视频| 久久人人妻人人做人人爽涩爱| 日本国产精品第一页久久| 青娱乐休闲在线观看视频| 小少妇久久久久久久| 日本最新区免费中文字幕| 国产精品久久久久久久综合av| 天天操日日干夜夜操| 中文字幕激情亚洲精品 | 欧美图区一区二区三区| 精品人妻一二三区更新| 中文字幕激情亚洲精品| 日日夜夜操国产av| 亚洲国产精品午夜福利久久 | 成人av中文字幕网址| 国产精品制服诱惑丝袜的| 日韩中文字幕色资源| 国产av电影网站一区| 91中文日韩免费精品| av一区二区在线播放色婷婷精品| 三级黄色在线播放网站| 秋霞午夜鲁丝片午夜精品久| 97超碰在线资源总站| 国产 精品 日韩 人妻| 国产av电影网毛片| 中文字幕少妇av一区二区三区| 亚洲图片av伦理三级| 一本v亚洲v天堂一区二区| 色综合天天综合网天天狠天| 国产小视频在线播放| 亚洲精品欧美日韩专区免费| 欧美一区二区三不卡| 免费网站黄色在线观看不卡| 超碰青青草原免费在线观看97| 都市激情中文字幕蜜桃| 啪啪啪在线免费视频| aaa夜夜夜精品视频| 亚洲狠狠婷婷久久综合| av天堂中文版www在线| 中文字幕成熟丰满人妻| 少妇张开腿让我爽了一夜视频| 97久久超碰成人精品网页91| 国产欧美亚洲精品第一页青草| 一区二区三区精品久久人妻| 亚洲夫妻另类在线视频| 大鸡吧淫水四射视频| 久久久三级高清免费| 免费在线视频 中文字幕| 久久97久久97免视看| 国产婷婷色三区二区一区| 五月天久草亚洲香蕉| 一区二区三区水蜜桃视频| 3p人妻一区二区三区| 亚洲欧美熟妇另类久久久久久| 精品中文字幕高清久久久久三级| 中国精品视频在线观看一区二区 | 免费可以看黄页的视频| 青青日常在线免费观看| 中文字幕av影片免费在线观看| 久久久三级高清免费| 福利动态视频午夜日本免费| 国产成人亚洲一区二区三区 | 亚洲最大的中文字幕在线| 国产在线av免费观看| 中文字幕+乱码+中文| youjizz少妇日本| 欧美日本一区二区三区精品| 国产一级二级三级在线看| 久久久com久久久com| 亚洲熟女少妇 精品| 精品黑丝袜一区二区三区| 亚洲精品乱码久久久久99| 国产亚洲高清在线观看| 人妻色噜噜噜噜一区二区| 男女边摸边吃奶边做视频免费看| 中文字幕欧美人妻精品精品| 日韩中文字幕色资源| 国产主播av在线观看| 亚洲天堂男人天堂中文字幕| 极品美女少妇高潮喷水| 人妻 日韩 制服 中文 在线| 久久久久久久国产黄色片| 少妇人妻肉欲短视频| 亚洲国产欧美日韩综合| 日日夜夜精品视频观看| 99久久无色码中文字幕免费| 亚洲午夜短视频在线| 免费精产国品一二三产区区大学生| 人视频一区二区三区| 人妻 日韩 欧美 综合 制服| 青青草手机免费在线视频| 天天干狠狠插夜夜操| 男女啪啪自拍露脸视频| 国内老熟妇精品露脸视频| 日本久久久久久久久人妻视频| 538精品视频国产| 亚洲综合在线一区二区三区四区| 亚洲欧洲久久av日日更新| 日韩一区=区三区四区| 国产无套白浆一区二区三区四区 | youjizzcom精品少妇| 91九色porny蝌蚪主页| 97精产国品一二三产区区| 91精品久久久久久久99蜜臀| 亚洲狠狠婷婷久久综合| huangse网站免费观看| 都市激情亚洲春色男人皇宫| 日本激情内射一区二区三区| 欧美成在线在线视频| av黄片网站在线观看| 中文字幕在线观看一二三四| 91成人在线观看免费| 亚洲国产成人久久无码| 国产加勒比精品蜜臀在线观看| 日本丰满人妻免费电影| 日韩中文字幕一级乱码在线亚洲| 男生捅女生逼的免费视频软件| 亚洲精品午夜福利久久| 制服乱伦强奸中文字幕| 最新欧美一级特黄大片| 少妇性感美女一区二区三区四区 | 欧美黄色网黄色欧美网| 亚洲第二页欧美视频| 欧美裸体xxxxx极品少妇| 日韩精品网站免费观看ww| 九一欧洲国产无码在线| 人妻 日韩 欧美 综合 制服| 露臀裙后入在线视频| 人妻夜夜爽av网站| 亲爱的请你原谅我 中文字幕| 日本国产福利视频在线观看| ass亚洲熟妇熟女pics| 在线观看欧美日一区二区 | 国产 福利 一区二区| 国产婷婷综合丁香亚洲欧洲| 麻豆精品传媒在线播放| 台湾性dvd性色av| 91激情视频在线视频| 国产午夜精品1区2区3区| 这里只有精品99视频| 六月丁香六月在线视频| 人妻 日韩 制服 中文 在线| 中文字幕_第1页_绿茶av| 大香蕉手机免费在线| 天天操天天舔天天操| 国产男女激情视频一区| 午夜精品久久十八禁| xxxxxx日本少妇| 真实国产乱子伦一区| 2023天天色天天操| 最近的中文字幕第二页| caoporn97超碰| 欧美视频一区二区三区三州| 亚洲综合一区二区在线视频| 国产+精品+在线观看| 宅男视频在线观看视频| 石原莉奈一区二久久影视| 国产在线免费av观看| 中文在线播放一区二区三区| 蜜桃系列一区二区观看| 大香蕉网成人在线观看| 日本一区二区伦理在线观看| 午夜一分钟视频免费在线观看| 我的嫂子伦理片在线观看| 免费网站黄色在线观看不卡| 亚洲 自拍 色综合图区av| 公交车人妻免费视频| 黄色av网址免费观看| 日韩免费一卡二卡三卡四卡五卡| 欧美精品日韩不卡免费| 爱妃视频av一区二区| 少妇张开腿让我爽了一夜视频| 色yeye香蕉人妻凹凸一区二区| 密臂av性久久久久蜜臂av| 美女摸自己下面出白浆的视频| 国产成人18黄网站免费观看| 94老司机福利社精品视频| 人妻ol未亡人中文字幕| 免费可以看黄页的视频| 国产大女露脸自拍大叫| 17夜人妻人人澡人妻| 欧美黄色网黄色欧美网| 狠狠躁夜夜躁人人爽天天BL| 成人在线视频日韩国产| 超碰av在线一区二区三区| www精品一区二区三区| 成年大片免费视频播放二级| 手机在线看日韩av资源| 亚洲熟妇色xxxxx妇色| 2019天天操天天日天天射| 粉嫩玉足夹茎视频在线看| 亚洲va欧美va国产综合久久| 99青青草原在线视频| 日韩欧美精品熟妇视频播放| 国产原创成人激情在线| 99热在线都是精品免费| 91免费一区二区久久| 国产成人自拍精品在线| 91精选国产九色porny| 人妻中文字幕影音先锋| 欧洲码亚洲码一区二区三区四区| 欧美另类视频第二页| 亚洲精品乱码久久久久99| 亚洲va欧美va国产综合久久| 日韩欧美精品熟妇视频播放| 亚洲欧美专区一区二区三区| 综合日韩人妻一区二区三区| 插美女阴道流水视频| 欧美日韩激情图片视频另类| 日本激情在线看一区二区三区| 中文字幕 av 在线| 精品久久久免费av| 亚洲欧美日本高清在线观看| 9999精品久久久久| 久久久亚洲av成人网人人| 各种玩小处雌女视频| 中文字幕成熟丰满人妻| 亚洲欧美熟妇另类久久久久久| 免费一区二区三区香蕉| 少妇喷水视频在线观看| 91瑟瑟视频在线观看| 亚洲影视精品一区二区| 日本a v中文字幕网| 欧美视频免费在线看| 欧美三级不卡不毒视频| 午夜无码精品一区二区三区| 亚洲 欧美视频在线| 熟女人妻伊人蜜桃视频| 中文字幕久久久aⅴ大片| 欧美成人性生活一级片| 亚洲av乱码一区二区三区四区| 欧美视频一区二区三区三州| 91高清免费在线播放| 成年人免费视频网站在线播放| 国产伦精品一区二区三区妓国产| 最近免费中文字幕日韩| 国产三级中文字幕av| 日本丰满少妇毛茸茸| 欧美另类视频第二页| 激情啪啪理论片中文字幕| 日韩一二三在线视频播放| 一级少妇精品久久久久| 美女摸自己下面出白浆的视频| 日韩一级高清免费播放| 中文字幕在线aⅴ免费观看| 精品国产一区二区三区欧美精品| 91精品国产在热久久| 中文字幕日产av一二三区| 国产视频污污污在线观看| av在线播放网址大全| 成人教育av在线网站| 男女裸交无套啪啪激情高潮| 精品国产一区二区三区欧美精品| 一区二区三区四区蜜桃在线| 中文在线天堂中文在线天堂| 中文在线播放一区二区三区 | 日本99精品一区二区三区| 99在线只有精品视频| 人妻性奴隶免费观看| 蜜桃精品噜噜噜av| 亚洲av乱码一区二区三区四区| 午夜激情片免费在线观看| 三级视频欧美视频亚洲视频| 亚洲中文有码字幕青青| 放荡的丝袜美腿护士老师| 中文字幕中文字幕一区三区| 搞黄色的网站在线观看| 久久97久久97免视看| 日本黄色an久久一区| 亲爱的请你原谅我 中文字幕| 精品熟妇丰满人妻视频| 男人的j插进女人的逼| 在线免费观看亚洲v| 特黄特黄的日韩爽大片| 2025中文字幕在线| 国产美女精品久久久有奶水| 国产又粗又猛又大爽又黄香借| 亚洲熟妇少妇一区二区| 2017夜夜操天天操| 亚洲AV永久青草无码士清品| 国产九色视频在线观看| 免费av在线亚洲精品| 免费观看亚洲女同性恋一区二区| 人妻蜜臀久久久av免费| 在线免费观看精品一区| 亚洲的国产中文字幕的av| 天堂av2025一区| 忘忧草精品久久久久久久高清| 亚洲情色成人精品视频| 国产在线av免费观看| 老鸭窝大视频网站a一级| 亚洲国产成人精品久久久久久久久 | 精品亚洲永久免费精品网站| 蜜桃视频app网站入口| 亚洲女人毛毛多毛耸耸| 广州最大的成人免费视频| 亚洲av乱码国产精品观看麻豆| 92大香蕉一区二区三区| 又大又黄又粗又爽少妇毛片| 91在线观看青青超碰| 日韩精品视频啊啊啊| 中文字幕亚洲精品熟女少妇| 一区二区三区四区无人区| 日本阿v片中文字幕在线| 欧美 亚洲 国产 日韩一| 日韩一级片黄色av| 啪啪啪在线观看免费视频| 亚洲综合网男人的天堂| 麻豆电影国产一区在线观看| 999精品视频免费看| 色噜噜狠狠一区二区| 日本中文字幕第三区| 欧美午夜理论片1000在线播放| 国产免费av天堂蘑菇视频| 日韩精品视频网站免费观看| 日韩级视频在线播放| av亚洲欧美一区二区| 国语自产精品视频在线看一大j8| 欧美人妖一区二区三区| 91免费一区二区久久| 欧美一卡二卡3卡4卡无卡十| 丰满老熟女av在线| 中文字幕a区一区三区| 3p人妻一区二区三区| 中文字幕人妻丝袜二区av| 欧美在线一区二区三区| 欧美国产亚洲自拍偷拍| 老外插美女在线视频| 99成全re视频免费观看在线看| 亚洲最新欧美偷拍视频| 丰满人妻一区二区三区免费视频棣| 91精品丝袜一区二区| 成人在线中文字幕日韩| 国产美女在线极品美女网站 | 亚洲熟女资源一区二区| av看片资源网手机版在线播放| 久久久国产亚洲精品黑人| 亚洲综合熟女久久30p| 字幕人妻一区二区视频| 国内偷拍视频在线观看| 中文一区二区在线播放| 青青青久免费在线视频| 亚洲国产av自拍网站| 77字幕网77中文字幕| 亚洲久久久久久久久| 青娱乐休闲在线观看视频| 国产自拍福利视频在线观看| 美女福利在线免费观看| 天天干天天谢天天操| 男女上下差差发哈插插插| 久久97久久97免视看| 啪啪啪在线免费视频| 2025中文字幕在线| 最新97在线视频资源| 亚洲精品一区二区三区av| 国产欧美亚洲精品第一页青草| 亚洲第一中文视频 | 亚洲黄片在线免费播放| 日本一区二三区好的精华液 | 九色视频在线观看网址| 成人av毛片免费观看| 免费观看黄片视频91| 99999精品视频在线观看| av在线视频观看免费| 中文字幕99精品一区| 亚洲久久久久久久久| 看国产剧的免费软件| 亚洲天堂aaa一区二区| 亚洲国产av自拍网站| 99精品一区在线观看| 日韩欧美亚洲第五页| 国产在线免费av观看| 亚洲一区二区三区在线直播| 午夜小视频 在线观看| 国内精品视频免费观看视频| 久久久久久久毛片5| 伊人国产精品成人在线| 亚洲国产精品va在线观看香蕉| 青青久在线观看免费视频| 在线观看免费a级电影| 国产老女人av一区二区三区| 啊啊啊啊啊鸡巴进小穴了视频| 成人av影视一区二区三区 | 美女少妇一区二区久久久| 亚洲第一视频在线视频| 国产精品一线二线三区| 在线免费观看精品一区| 7799精品视频免费观看 | 成人av中文字幕网址| 天天玩天天摸天天舔| 女同性ⅹxx女同hd偷拍| 亚洲经典国产一区二区三区| 亚洲国产成人爱av网站| 日本丰满老熟妇bbw| 大香蕉手机免费在线| xxxxxx日本少妇| 人妻精品无码一区二区三区百花| 色尼玛图片亚洲综合| 国产日日夜夜精品视频免费| 69久久夜色精品国产69| 国产97精品在线免费看| 大香蕉太香蕉在线免费看| 欧美国产亚洲自拍偷拍| av亚洲天堂中文字幕| 亚洲美女福利视频免费| 午夜天堂网在线观看资源网站| 日韩欧美在线综合网高清| 国产三级在线一区二区三区| 亚洲图片偷拍30pxxx| 一级黄色片特级黄色片| 日产精品免费一区二区三区| 亚洲国产香蕉碰碰人人| 99国产精品视频播放| 久久精品乱码中文字幕| 大鸡吧淫水四射视频| 图片区小说区自拍偷拍区| 蜜臀国产精品久久久久久| 欧洲码亚洲码一区二区三区四区 | 亚洲欧洲视频一二三区| 成年女女子免费视频播放| 成人av在线播放老熟妇| 青青草毛片在线观看| 免费看亚洲av的网站| 在线观看免费视频网站色| 国产在线观看XXXXX| 人妻熟妇久久久久久xxx| 天天摸天天舔天天透| 一区二区三区四区蜜桃在线| 久久人人妻人人做人人爽涩爱| 国产一级二级三级在线看| 久久人人妻人人做人人爽涩爱| 在线看国产91av| 美女少妇一区二区久久久| 日本一区二区三区综合网| 日韩九色pron国产日韩| 搞黄色的网站在线观看| 亚洲无码免费一二三区视频| 日本最新区免费中文字幕| 人妻 日韩 制服 中文 在线 | av一区二区在线播放色婷婷精品 | 中文字幕日韩一二区| 国产美女精品久久久有奶水| 清纯国模自拍视频在线观看| 精品人妻一区二区三区18p| 色婷婷综合欧美日韩亚洲| 青青青在线视频免费观看手机版| 久久久久久久久91精品视频| 精品99久久久久久久久| 日韩 欧美 在线 第一页| 日韩一区=区三区四区| 亚洲免费在线观看,| 免费观看黄色视频啊小穴啊| av亚洲天堂中文字幕| 色偷偷东京热男人的天堂| 蜜桃黄视频在线观看| 亚洲av在线观看久久久| 国产交换乱淫99视频| 日韩欧美亚洲第五页| 日本太黄视频免费看| 鲁久久无码五月天有码| 日日夜夜操国产av| 欧美亚洲自拍偷拍xxx| 欧美大屁股撅起来射精视频| 青青日常在线免费观看| 国内偷拍视频在线观看| 91大神长腿美女视频在线观看| 亚洲av乱码一区二区三区观影| 亚洲熟妇色xxxxx妇色| 亚洲精品欧美日韩专区免费| 91九色porny蝌蚪主页| 在线免费观看亚洲v| 91久久久久久久电影| 国产又黄又高潮又a的视频| 91瑟瑟视频在线观看| 999人妻精品中出| 午夜天堂网在线观看资源网站| 在线观看国产剧情av| 亚洲专区 欧美日韩| av熟女乱一区二区三区| 午夜精品婷婷午夜精品| 男人和女人哪个更色| 色综合人妻中文字幕| 在线观看中文字幕91| 2022国产情侣在线视频播放| 蜜臀av在线观看一区| 黄色av网址免费观看| 天天综合网精品视频天天看| aaa夜夜夜精品视频| 国产亚洲精品视频久久久| 国产剧情传媒av在线| a区精品视频在线观看| 日本国产精品第一页久久| 五月婷婷丁香中文字幕亚洲一区| 精品色欲久久久青青青人人爽| 巨大屁股女教师极品白嫩少妇| 国产精品大片在线观看网站资源 | www人妻一区二区| 最近的中文字幕一区二区| 免费看黄片免费看视频| 午夜dj在线观看完整版| 天天干天天干天天操天天日 | 人妻蜜臀久久久av免费| 男人天堂中文字幕av| 男女边摸边吃奶边做视频免费看| caopron在线成人免费| 久久永久免费专区人妻| 深夜黄色福利网站在线观看| 人妻欲求不满作品番号| ntr人妻セックス在线| 久久中文字幕永久第一页| av熟女40到50岁名字| 人妻欲求不满作品番号| 中文字幕 av 在线| 日韩精品性色一区二区在线观看| 国产午夜精华视频在线| 天天日天天干天天啪天天射| 日本丰满少妇毛茸茸| 色噜噜狠狠一区二区| 精品少妇在线观看视频| 精华液一区二区区别| 久久久国产亚洲精品黑人| 少妇人妻肉欲短视频| 333kkkk·com99久久| aaa夜夜夜精品视频| 中文字幕第一区高清av| 亚洲国产伦理久久精品| 在线精品亚洲欧美日韩| 美女摸自己下面出白浆的视频| 好紧好湿好爽好大A视频| 国产午夜在线观看不卡| caoporn97超碰| 成年视频短视频在线播放| av亚洲欧美一区二区| 国产av办公室丝袜在线| 免费精品国产人妻国语| 在线精品亚洲欧美日韩| 亚洲av乱码一区二区三区四区| 麻豆精品传媒在线播放| 性美女毛片久久a区| 亚洲mv在线免费观看| 在线免费观看精品一区| 国产精品自产拍在线观| 日韩精品视频网站免费观看| 97 在线观看视频网站| 大香蕉在线欧美观看| 日日av拍夜夜添久久免费老牛| 91成人在线观看免费| 东京不太热在线观看视频| 五月天久草亚洲香蕉| 精品国产专区91精品| 鲁死你资源站亚洲av一级aⅴ| 国产一区二区精品调教| 日本欧美黄色网站免费| 99999精品视频在线观看| 91精选一区二区三区四区| 国产在线观看av专区| 欧美亚洲变态另类在线观看| 玩弄人妻少妇精品视频在线| 亚洲情色欧美日韩在线| xxx一区二区三区在线观看| 熟妇高潮喷水在线120p| 欧美成人中文字幕在线视频| av在线免费观看一区| 黄色av观看一区二区三区| 草草影院色视频免费在线观看| 99精品午夜一区二区三区| 天天看天天舔天天摸| 色噜噜狠狠一区二区| 日韩一二区内射电影| 国产免费人妻人伦精品| 亚洲精品午夜福利久久| 久久精品视频女人按摩 | 天天透天天插天天日| 9i精品福利一区二区三区蜜桃| 91高清免费在线播放| 美女主播一区二区三区| 久久精品国产亚洲av四区| v888av精品少妇| 两人在沙发激情的视频| 亚洲 自拍 色综合图区av网站| 99成全re视频免费观看在线看 | 97视频免费观看一区| 美女福利在线观看视频| 少妇高潮一区二区三区在线| 色丁香国产精品综合久久| 粗大挺进朋友人妻身体里国产| 操女人逼逼好爽啊操| 视频一区 欧美情色| 鲁死你资源站亚洲av一级aⅴ | 91久久美利坚合众国保护| 91免费在线播放视频| 青青草毛片在线观看| 国产av国片精品jk制服| 天天草天天日天天舔| 老司机福利社免费视频| 在线观看视频一区二区精品| 91九色popny人妻| 一级av中文字幕在线观看| 深夜福利成人在线观看| 大香蕉在线欧美观看| 亚洲伊人第一综合网| 超碰97在线观看免费| 五月天色婷婷亚洲欧美| 免费高清视频亚洲熟女| 床戏高潮呻吟声片段大全 | 91久久精品视频地址| 男女视频一区在线观看| 亚洲激情四射在线观看视频| 涩爱av一区二区在线播放视频| 大香蕉网成人在线观看| 男人的j插进女人的逼| 男插女下面真人视频| 91在线观看青青超碰| 精品国产成人在线免费| 各种玩小处雌女视频| 欧美日韩激情图片视频另类| 久久久精品国产综合| 天天草天天日天天舔| 欧美熟妇激情在线观看| 北岛玲精品一区二区三| 日韩夫妻性生活视频在线观看免费| 国产加勒比精品蜜臀在线观看| 色五月婷婷综合国产在线 | 182tv免费福利中文字幕| 国产亚洲av网址大全| 99via精品福利影视| 333kkkk·com99久久| 秋霞午夜鲁丝片午夜精品久| 男女啪啪自拍露脸视频| 无码丝袜人妻高跟鞋| 欧美口爆吞精一区二区三区| JK白丝喷白嫩嫩久久久| 国产黄色片在线观看网站| 日本jizzjizz少妇| 久久久亚洲av成人网人人| 91人妻porny精品国产| 韩国美女主播福利在线| av在线免费一区二区| 亚洲精品一二三在线观看| 97视频免费观看一区| 欧美色视频日本片免费看| 超碰国产极品尤物在线| 97精产国品一二三产区区| 亚洲经典国产一区二区三区| 日韩中文字幕一级乱码在线亚洲| 97 在线观看视频网站| 天天综合网精品视频天天看| 成年女女子免费视频播放| 国产在线观看XXXXX| 韩国美女主播福利在线| 欧美日韩性生活视频在线| 日日躁夜夜躁狠狠躁av蜜臀| 亚洲天堂av影视在线| av蜜臀免费在线观看| 午夜狠狠干在线视频| 亚洲码和欧洲码的尺码| 777爽死你无码免费看一二区| 精品人妻一区二区三区18p| 91精品久久一区二区| 国产av剧情网址大全| 紫川动漫在线观看免费完整版| 91精品国语对白人妻刺激使劲| 美女穿白丝被啪啪到高潮| 天天干天天做天天摸| 亚洲av永久无码精品尤物| 91免费免费观看在线| 香蕉视频免费看国产精品| 日本激情内射一区二区三区| 午夜福利92一区二区三区久久 | 国产主播在线露脸观看| 网友自拍+人妻丝袜+制服诱惑| 人人爱精品人人艹人人干| 99在线只有精品视频| 清纯国模自拍视频在线观看| 久久久精品欧美一区二| 亚洲精品中文字幕原千岁| 亚洲码和欧洲码的尺码| 亚洲熟女毛茸茸上厕所尿尿| 日日av拍夜夜添久久免费老牛| 瑟瑟视频在线网站免费观看| 色姑娘天天干天天操| 97精品视频久久久久| 欧美图区一区二区三区| 亚洲情色在线视频播放| 中年美熟妇与少年的激情| 99久久国产综合精品五月天| www人妻一区二区| 久久久com久久久com| 午夜小视频免费在线| 性美女毛片久久a区| 中文字幕熟女人妻丝袜电影| 国产 精品 日韩 人妻| 欧美 亚洲 国产 日韩一| 日韩三级 欧美精品| 国产成年无码av片在线| 最近的中文字幕一区二区| 人妻熟妇久久久久久xxx| 黑人玩弄,人妻,一区二区三区 | 亚洲天堂aaa一区二区| 九一欧洲国产无码在线| 免费观看黄色视频啊小穴啊| 男人插女人阴穴的视频| av在线免费一区二区| xxoo视频免费在线观看| 中文字幕亚洲天堂av在线| 亚洲激情四射在线观看视频| 少妇视频播放在线播放免费观看| 天天干天天插天天透| 最新69视频在线观看| 男人午夜视频在线观看| 91社区男人都懂的网站| 精品少妇在线观看视频| 自由的成熟女性色视频| 国产55夜色66夜色男人的天堂| 精品麻豆国产综合在线9| 亚洲人成在线1国产盗拍| 最新中文字幕不卡av| 精品一区二区三区最新| 国产一二三区在线播放| 97香蕉在线17c| 一本v亚洲v天堂一区二区| 亚洲欧洲视频一二三区| 一区二区三区水蜜桃视频| a区精品视频在线观看| 免费观看黄色视频啊小穴啊| 日本老熟女人体艺术| 亚洲 欧美 日韩 另类在线| 国产寡妇又爽又紧又湿视频| 亚洲综合精品天堂丁香芒果| 91成人国产在线观看九色| 欧美成人中文字幕在线视频| 欧美日韩高清无毒不卡| 日本最新区免费中文字幕| 国产加勒比高清无码在线视频| 天堂av中文官网在线| 78m中文字幕在线观看| 午夜小视频免费在线| 国产精品免费观看av| 中文字幕亚洲精品八区 | 中文字幕激情亚洲精品| kendralust熟女少妇| 青青草毛片在线观看| 免费在线观看成人激情视频| 放荡的丝袜美腿护士老师| 99久久精品岛国免费黄色网| 2020最新中文字幕在线| 韩国美女视频在线观看18+| 欧美国产一区二区三区在线看| 日日夜夜精品视频观看| 亚洲熟妇色xxxxx妇色| 色综合天天综合高清网国产在线| 在线观看中文字幕91| 中文字幕在线观看一二三四| 欧美一区二区三区视频在线观看| 亚洲av无日韩毛片久久| 久久人人妻人人做人人爽涩爱| 色综合亚洲一区二区小说性色aⅴ| 狠狠躁夜夜躁人人爽天天BL| 天天干人人干天天操| 天天操天天舔天天操| 日本一区二区三区综合网| 欧美美女色视频免费看| 加勒比日本一区二区三区| 一区二区三区麻豆蜜桃视频| 精品三区漫画图片分类| 色姑娘天天干天天操| 女同性ⅹxx女同hd偷拍| 91久久久久久久蜜桃| 天天干天天日少妇网| 在线观看亚洲视频一区二区| 久久久久久久久久二区| 国产精品亚洲av国产| 最近2019日本中文字幕| 中文字幕亚洲天堂av在线| 中文乱码字幕人妻精品| 日日夜夜操国产av| 日韩欧美 亚洲国产| 97国产精品人人爽人人做| 男女裸交无套啪啪激情高潮| 免费观看黄片视频91| 久久精品aⅴ无码中文字字幕蜜桃| 麻豆电影国产一区在线观看| 中文字幕_第1页_绿茶av| 天堂av在线男女av| 国产青青自拍视频在线观看看| 久久热高清在线观看| 亚洲另类校园春色小说| www精品一区二区三区| 99久久99久久综合| 99偷拍精品一区二区| 日本 高清 中文字幕| 国产精品免费视频22| 日本在线不卡视频播放| 精品国产伦理片1区2区| av精品一区二区三区免费观看| 人妻少妇精品视频在线观看| 久久久亚洲av成人网人人| 99999精品视频在线观看| 久久精品视频女人按摩| 日韩人妻少妇av电影| av中文字幕巨乳人妻| 久久精品国产亚洲av四区| 大香蕉太香蕉在线免费看| 99via精品福利影视| 在线观看视频一区二区精品| 亚洲男人平均性生活时间| 激情综合亚洲欧美日韩一区| 欧美日韩高清无毒不卡| 久久精品日产第一区二区三区| 中文在线播放一区二区三区| 久久热高清在线观看| 中文字幕超碰18区| 久久精品亚洲一区二区三| huangse网站免费观看| caoporn97超碰| 青青操在线超碰传媒| 大香蕉太香蕉在线免费看| av亚洲天堂中文字幕| 欧美在线一区二区三区| 涩爱av一区二区在线播放视频| 777爽死你无码免费看一二区| 成年女女子免费视频播放| 五月开心六月伊人色婷婷| 亚洲精品视频在线99| 人妻人妻干干干干人妻网站| 欧美成人性生活一级片| 九色视频在线观看网址| 操的少妇嗷嗷叫视频| 日韩欧美免费看的惊悚片电影| 少妇张开腿让我爽了一夜视频| 免费在线视频 中文字幕| 日本一区二区伦理在线观看| 青青草毛片在线观看| 亚洲精品在线免费观看视频| 狠狠操狠狠操狠狠搞| 日本激情在线看一区二区三区| 中文字幕在线精品的视频| 欧美一区二区三不卡| 大香蕉av动作片在线观看| 欧洲亚洲国产永久精品| 免费在线观看不卡高清av| 成人国产av精品麻豆入口| 中文字幕久久五月天| 手机在线一区二区三区| 91手机免费在线视频| 在线步兵一区二区三区| 中文字幕福利在线观看| 9l视频自拍蝌蚪9l成人熟妇| 超级碰免费人妻97| 久久人人妻人人做人人爽涩爱| 精品麻豆国产综合在线9| 国产成年无码av片在线| 99久久久久久久久96久久| 青青久在线观看免费视频| 日韩亚洲欧美中文在线电影| 青青色国产在线视频网站| 中文乱码字幕人妻精品| 中文字幕人妻不卡久久| AV成人国产免费久久精品| 中年美熟妇与少年的激情| 亚洲第一中文视频 | 亚洲第一中文视频 | JK白丝喷白嫩嫩久久久| 69久久夜色精品国产69| gogo大尺度二区三区| 日日夜夜精品视频观看| ww久久久久国产喷水18禁| 狠狠躁夜夜躁人人爽天天BL| 男人的天堂av成人网| 超碰国产极品尤物在线| 国产精品8888在线观看| 亚洲国产欧美日韩综合| 狠狠色丁香久久综合频道日韩| 韩国三级国产精品一区| 国产在线免费av观看| 中文字幕亚洲情色在线观看| 人妻女教师的沦陷大明| 男人的天堂在线免费av| 日本欧美在线免费观看视频| 亚洲AV无码成人精品国产一区| 美女穿白丝被啪啪到高潮| 青青草手机免费在线视频| 狠狠综合久久亚洲av蜜臀| 国产免费公开视频在线播放| 夜夜色视频在线观看| 强伦轩人妻一区二区三| 久久热高清在线观看| 香蕉视频免费看国产精品| 免费看日本特黄特色| 精品国产一区二区三区欧美精品| 亚洲熟女国产午夜精品| 精品人妻一二三区更新| 日韩精品性色一区二区在线观看| 国产老头视频在线观看| 亲爱的请你原谅我 中文字幕| 国产精品久久久免费99| 日本丰满老熟妇bbw| 日本aaaaa特黄| 国产伦精品一区二区三区妓国产| 成年人免费视频网站在线播放| 免费网站黄色在线观看不卡| 91日本av在线观看| 欧美人体一区二区视频| 中文字幕在线aⅴ免费观看| 精华液一区二区区别| 偷拍亚洲图片欧美另类| 91极品尤物国产在线播放| 网友自拍+人妻丝袜+制服诱惑| 亚洲av日韩美aⅴ| 人视频一区二区三区| aaa夜夜夜精品视频| 日韩在线视频观看你懂的| 两人在沙发激情的视频| 精品日产一匹二匹三匹四匹五匹| 四十路の五十路熟女网址| 精品人妻一区二区三区18p| 熟女国产一区二区三区| 精品久久久中文字幕熟女| 最新国产剧情在线一区| 蜜臀久久99精品久久久久久久久 | 日韩三级 欧美精品| 这里只有精品99视频| 日韩精品在线观看直播| 国产精品免费视频22| 成人教育av在线网站| 国产精品一级片免费看| 最近2019日本中文字幕| 又粗又硬又黄又色的| 啪啪啪在线观看免费视频| 国产av一区二区最新精品| 无套内射黑丝美女91| 国产精品8888在线观看| 国产av剧情网址大全| 人妻少妇麻豆中文字幕久久精品 | 亚洲天堂av影视在线| 亚洲狠狠婷婷久久综合| 最近免费中文字幕日韩| 日本伦精品一区二区三区免费| 最近最新中文字幕资源在线| 日本丰满人妻免费电影| 亚洲欧美三级在线观看视频| 国产精成人品一区久图片| 日韩一级黄色片免费在线观看| 午夜dj在线观看免费完整视频| 日韩一级高清免费播放| 九九热线这里只有精品| 无码大荫蒂视频在线| 91久久人澡人妻天天做天天爽| 亚洲男人天堂2025| 青青操在线超碰传媒| 91精品人妻丰满熟妇| 黑人中出日本人妻系列| 中文热免费在线视频| 一级特黄夫妻生活大片| 人鱼小姐在线观看国语版字幕| 熟妇高潮喷水在线120p| 精品久久久免费av| 女高中生第一次破苞av| 国产精品国产自产拍在线| 熟妇高潮喷水在线120p| 午夜dj在线观看完整版| 亚洲天堂av在线免费看 | av资源最新版在线天堂| 老外插美女在线视频| 日韩人妻熟妇精品xxx| 韩国美女视频在线观看18+| 在线看不卡日本av| 日韩免费一卡二卡三卡四卡五卡 | 强d乱码中文字幕熟女导航| 亚洲插美女综合av| 9网网站免费看nb国产| a在线观看免费久不卡精品| 全国最大成人 中文字幕| 在线看国产91av| 亚洲午夜在线亚洲午夜在线| 中文字幕人妻免费电影| 亚洲欧美久久精品免费| 老窝鸭av一区二区三区| 富婆按摩高潮一区二区三区91| 美女和猛男诱惑操逼捅鸡鸡| 一级av中文字幕在线观看| 黄色小网站在线免费观看| 欧美成人性生活一级片| 午夜久久在线观看视频| 免费观看日本伦理片| 亚洲清纯国产com| 91精品久久久久久久99蜜臀| 特黄把女人弄爽又大又粗| 中文av字幕在线观看| 99视频精品在线免费观看| av黄片网站在线观看| 激情91久久婷婷综合| 18免费1000视频国产| 午夜福利伦理片在线观看| 亚洲国产成人一区二区久久久| 91人妻porny精品国产| caopron在线成人免费| 日韩欧美亚洲第五页| xxx一区二区三区在线观看| 午夜精品久久十八禁| 91九色popny人妻| 狂野欧美激情性xxxx| 午夜狠狠干在线视频| 成人两性色午夜视频免费88AV| 激情视频国产在线观看| 九色91在线只有精品| 老鸭窝大视频网站a一级| 国产主播精品在线一区| 日本在线不卡视频播放| 久产久91精国九品打| 99久久热只有国产精品| 伊人婷婷视频在线观看| caoporn97超碰| 国产亚洲高清视频精彩在线播放| 日韩一二区内射电影| 97人妻少妇熟女av| 日本一卡不带卡的视频| 日本黄站一区二区在线观看| 久久香蕉欧美日韩av蜜桃| 色五月婷婷综合国产在线| 瑟瑟免费在线观看视频| 亚洲av无日韩毛片久久| 中文字幕激情亚洲精品| 大香蕉国产手机在线观看| youjizz少妇日本| 免费观看亚洲欧洲在线视频 | 国产亚洲精品久久久久久电影| 超碰97人妻中文字幕| 韩国三级国产精品一区| caoporn97超碰| 2017夜夜操天天操| 伊人激情综合视频网| 密乳一区二区三区国产亚洲av| 人妻中文字幕影音先锋| 天堂久久精品无码一区二区| 午夜狠狠干在线视频| 男女边摸边吃奶边做视频免费看| 精品久久久福利国产| 2021国产麻豆剧传媒精品入口| 国产免费人妻人伦精品| 国产精品网在线观看| 午夜dj在线观看免费完整视频| 久久久久一区二区三区四区| 日韩欧美亚洲第五页| 日本 高清 中文字幕| 在线观看国产区一区二| 青青操一区二区三区| 国产真人做爰免费观看| 黑人巨大欧美一区二区视频| 夜夜色视频在线观看| 大香蕉av动作片在线观看| 狠狠添狠狠添狠狠添免费出高潮水 | 一区二区三区高清在线| 网友自拍+人妻丝袜+制服诱惑| 小少妇久久久久久久| 最近的中文字幕第二页| 欧美大屁股撅起来射精视频| 欧美日韩性生活视频在线| 都市激情中文字幕蜜桃| 91精品青草福利久久午夜| 亚洲的国产中文字幕的av| 国产在线免费av观看| 天天色天天操天天色综合| 亚洲黄片在线免费播放| 亚洲精品视频在线99| 在线免费观看精品一区| 视频一区二区在线观看视频 | 五月天色婷婷亚洲欧美| 蜜桃系列一区二区观看| 国产精品一线二线三区| 亚洲午夜在线亚洲午夜在线| 久久97久久97免视看| 国内在线精品视频在线观看| 日韩中文av在线观看| 国产美女在线极品美女网站| 狠狠综合久久亚洲av蜜臀| 日本熟妇三十熟女精品区| caoporn中文字幕视频| 人妻欲求不满作品番号| 97视频免费观看一区| 99偷拍精品一区二区| 亚洲高清码在线精品av| 中年美熟妇与少年的激情| 草莓视频精品在线观看| 青草神马视频在线网址| 国产av剧情网址大全| 免费观看男人操逼的操女人的| 中文字幕福利在线观看| 亚洲天堂男人天堂中文字幕| 女高中生第一次破苞av| 中文字幕 av 在线| 五月开心六月伊人色婷婷| 91人妻porny精品国产| 欧洲亚洲国产永久精品| 免费在线一区二区视频| 久久久三级高清免费| 偷怕自拍在线免费观看| 蜜臀av在线观看一区| 成人av泽村在线播放| 大伊香蕉精品一区视频在线| 9网网站免费看nb国产| 午夜精品久久十八禁| 国产老女人av一区二区三区| 欧美专区在线观看视频| 99久久精品岛国免费黄色网| 日本激情内射一区二区三区| 乱色熟女综合一区二区三区四 | 99精品一区在线观看| 蜜桃av在线观看网站| 黄色av网址免费观看| 人妻欧美制服中文字幕| 国产av国片精品jk制服| 亚洲精品无码中文字幕专区| 另类激情国产专区在线观看免费| 久久与久久最新视频| 被大鸡吧操骚B真爽视频| 国产老头视频在线观看| 蓝莓小视频在线观看| 啪啪啪1000国产精品| 国产婷婷综合丁香亚洲欧洲| 91成人国产在线观看九色| 色姑娘天天干天天操| 51国精产品一区二区三| 天天草天天日天天舔| 日本一卡不带卡的视频| 最近的中文字幕第二页| av看片资源网手机版在线播放| 最近的中文字幕一区二区| 少妇性感美女一区二区三区四区| 青青草视频在线观看播放影院免费| 蜜桃黄视频在线观看| 97超碰资源总站在线观看| 亚洲午夜在线亚洲午夜在线| 亚洲熟女毛茸茸上厕所尿尿| 国产高清激情在线视频| 国产视频播放一区二区三区| 久久精品aⅴ无码中文字字幕蜜桃 中文字幕丝袜人妻乱一区三区 | 人妻ol未亡人中文字幕| 九一欧洲国产无码在线| 强d乱码中文字幕熟女导航| 99热在线都是精品免费| 五月天中文字幕亚洲| 日韩少妇中文字幕一区| 日韩欧美免费看的惊悚片电影| 成人在线中文字幕日韩| 最近最新高清欧美日韩中文字幕| 日韩一二三在线视频播放| 中文字幕人妻不卡久久| 欧美人体一区二区视频| 丰满的人妻免费在线观看| 国产视频污污污在线观看| 麻豆电影国产一区在线观看| 99国产热精品在线观看| 午夜国产精品福利一二| 免费在线视频 中文字幕| 男人午夜视频在线观看| 大香蕉在线欧美观看| 朴妮唛无删减福利在线观看| 久久综合精品五月天| 久久精品亚洲一区二区三| 亚洲免费不卡一区二区三区| 在线亚洲视频免费看| 色婷亚洲五月在线观看| 欧美亚洲国产第一二区| 精品国产成人在线免费| 啪啪啪1000国产精品| 91社区男人都懂的网站| 天天射天天舔天天看| 忘忧草精品久久久久久久高清| 大香蕉av动作片在线观看| 人鱼小姐在线观看国语版字幕| 丝袜 制服 国产 欧美 日韩| 黄色小网站在线免费观看| 欧洲av网址在线观看| 亚洲熟女少妇 精品|