精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Elasticsearch使用實戰以及代碼詳解

開發 前端
架構本文給大家講解了 waynboot-mall 項目中對于 elasticsearch 的使用以及代碼實戰講解。希望能幫助大家更好理解 elasticsearch,大家在自己的項目中如果要引入 elasticsearch,可以直接參照本文的示例代碼即可使用。

Elasticsearch 是一個使用 Java 語言編寫、遵守 Apache 協議、支持 RESTful 風格的分布式全文搜索和分析引擎,它基于 Lucene 庫構建,并提供多種語言的 API。Elasticsearch 可以對任何類型的數據進行索引、查詢和聚合分析,無論是文本、數字、地理空間、結構化還是非結構化的。

Elasticsearch 的核心功能是搜索,它可以對數據進行分詞匹配、相關性評分、高亮顯示等操作,返回相關度高的結果列表。Elasticsearch 也可以用作數據分析,它可以對數據進行統計、分類、聚類等操作,返回聚合結果或圖表。

本文將用我開源的 waynboot-mall 項目作于代碼講解,Elasticsearch 版本是 7.10.1。

waynboot-mall 是一套全部開源的微商城項目,包含三個項目:運營后臺、H5 商城和后端接口。實現了一套完整的商城業務,有首頁展示、商品分類、商品詳情、sku 詳情、商品搜索、加入購物車、結算下單、支付寶/微信支付、訂單列表、商品評論等一系列功能。

本文大綱如下,

圖片圖片

應用場景

Elasticsearch 的典型應用場景有以下幾種:

  • 全文搜索:Elasticsearch 提供了全文搜索的功能,適用于電商商品搜索、App 搜索、企業內部信息搜索、IT 系統搜索等。例如我們可以為每一個商品作為文檔保存進 Elasticsearch,然后使用 Elasticsearch 的查詢語言來對文檔進行分詞匹配、相關性評分、高亮顯示等操作,返回相關度高的結果列表。
  • 日志分析:Elasticsearch 可以用來收集、存儲和分析海量的日志數據,如項目日志、Nginx log、MySQL Log 等,往往很難從繁雜的日志中獲取有價值的信息。Elasticsearch 能夠借助 Beats、Logstash 等工具快速對接各種常見的數據源,并通過集成的 Kibana 高效地完成日志的可視化分析,讓日志產生價值。
  • 運維監控:Elasticsearch 也可以用來監控和管理 IT 系統的運行狀態和性能指標,如 CPU、內存、磁盤、網絡等。可以使用 Beats、Logstash 將這些數據實時采集并索引到 Elasticsearch 中,然后通過 Kibana 構建自定義的儀表盤和告警規則,實現實時的運維監控和預警。
  • 數據可視化:Elasticsearch 與 Kibana 的結合提供了強大的數據可視化能力,可以使用 Kibana 來創建各種類型的圖表和儀表盤,展示 Elasticsearch 中存儲或聚合的數據,如直方圖、餅圖、地圖、時間線等。還可以使用 Kibana 的 Canvas 功能來制作動態的數據展示頁面,或者使用 Kibana 的 Lens 功能來進行交互式的數據探索。

waynboot-mall 商城選擇使用 Elasticsearch 作為搜索引擎,負責對商品數據進行索引和檢索,選擇 Elasticsearch 的原因有以下幾點:

  1. Elasticsearch 是一個開源的分布式搜索引擎,基于 Lucene 開發,支持全文檢索、結構化檢索、地理位置檢索等多種類型的檢索,功能豐富。
  2. Elasticsearch 本身具有高性能和高可用性的設計,可以通過集群和分片機制實現水平擴展,支持海量數據的存儲和處理,適合大規模的商城搜索場景。
  3. Elasticsearch 網上社區活躍,現有互聯網上有大量的使用文檔和案例,方便入門使用和問題排查。
  4. Elasticsearch 有眾多分詞器插件,關于中文分詞器的使用非常成熟,拿來即用,支持自定義字典等。

waynboot 項目使用的 Elasticsearch 插件

Elasticsearch 的插件非常豐富,我給大家介紹其中 waynboot 項目使用的 Elasticsearch 插件。

IK Analyzer

IK Analyzer 是一個開源的中文分詞器,由阿里巴巴集團發布。它采用了細粒度切分和歧義處理等技術,能夠較好地處理各種中文文本。IK Analyzer 支持普通模式、搜索模式和拼音模式三種分詞方式,并可以根據需要自定義字典。

Pinyin Analyzer

Pinyin Analyzer 插件是一個用于將中文字符轉換為拼音的插件,它集成了 NLP 工具(nlp-lang)。該插件包含了分析器:pinyin,分詞器:pinyin 和 token-filter:pinyin。該插件還提供了一些可選的參數,可以控制拼音的輸出格式,例如是否保留首字母,是否保留全拼,是否保留非中文字符等。

目錄結構

在 waynboot-mall 項目中,給 Elasticsearch 定義了專門的數據訪問層 waynboot-data-elastic,該層目錄結構如下:

|-- waynboot-data                    // 數據訪問層
    |   |-- waynboot-data-elastic        // Elasticsearch訪問配置模塊
    |       |-- config
    |       |-- constant
    |       |-- mananger

包目錄說明如下:

  • config:Elasticsearch 相關的配置類,包含 ElasticConfig 連接配置類 以及 ElasticClientConfig 客戶端配置相關類,ElasticClientConfig 類可以設置訪問密碼。
  • constants:Elasticsearch 訪問層的相關常量類,這里面定義了商品同步數據的索引名稱等信息。
  • mananger:Elasticsearch 訪問層的相關操作類,定義了 ElasticDocument 文檔操作類,用于操作 Elasticsearch。

代碼實戰

在 waynboot-mall 項目中,Elasticsearch 主要用于支持首頁商品的分詞搜索、分頁排序等功能。Elasticsearch 版本是 7.0,以下實戰講解都是在 7.0 版本基礎上進行。

要使用 Elasticsearch ik 分詞器進行中文分詞搜索,首先需要安裝相應的插件 elasticsearch-analysis-ik,然后在創建索引時指定使用中文分詞器作為字段的 analyzer 屬性。

在日常對 Elasticsearch 的操作中,我們可以通過 rest api 的方式進行操作。

Elasticsearch rest api 操作

如下我們可以創建一個索引名稱為 goods,包含兩個屬性 title、content。并且 這兩個屬性都使用 ik 分詞器。注意這里我用的 Elasticsearch 提供 Rest api 方式創建索引。

PUT /goods
    {
        "settings": {
            "index": {
                "number_of_shards": 1,
                "number_of_replicas": 0
            }
        },
        "mappings": {
            "properties": {
                "title": {
                    "type": "text",
                    "analyzer": "ik_max_word"
                },
                "content": {
                    "type": "text",
                    "analyzer": "ik_max_word"
                }
            }
        }
    }

創建索引后,就可以向索引中添加兩條數據,例如:

POST /books/_doc/1
    {
        "title": "格林童話",
        "content": "這本書介紹了很多童話故事,有白雪公主、獅子王、美人魚等。"
    }

    POST /books/_doc/2
    {
        "title": "中國童話故事",
        "content": "這本書介紹了很多中國童話故事。"
    }

然后我們就可以使用 match 語法來進行中文分詞檢索,這里我查詢 goods 索引中,title 屬性是 "動畫" 的記錄。如下:

GET /books/_search
    {
        "query":{
            "match":{
                "title": "童話"
            }
        }
    }

查詢結果如下:

{
        "took": 0,
        "timed_out": false,
        "_shards": {
            "total": 1,
            "successful": 1,
            "skipped": 0,
            "failed": 0
        },
        "hits": {
            "total": {
                "value": 2,
                "relation": "eq"
            },
            "max_score": 0.11190013,
            "hits": [
                {
                    "_index": "books",
                    "_type": "_doc",
                    "_id": "1",
                    "_score": 0.11190013,
                    "_source": {
                        "title": "格林童話",
                        "content": "這本書介紹了很多童話故事,有白雪公主、獅子王、美人魚等。"
                    }
                },
                {
                    "_index": "books",
                    "_type": "_doc",
                    "_id": "2",
                    "_score": 0.099543065,
                    "_source": {
                        "title": "中國童話故事",
                        "content": "這本書介紹了很多中國童話故事。"
                    }
                }
            ]
        }
    }

可以看到,查詢結果中匹配了標題包含“童話”的文檔,這說明 Elasticsearch 使用了中文分詞器對查詢字符串和文檔進行了分詞,并根據相關性得分返回了結果。

全文搜索以及篩選排序

在 waynboot-mall 項目中,商城首頁頂部提供了商品搜索欄,用戶可以輸入商品名稱搜索自己想要的商品,搜索結果展示后,還可以進行熱門、新品過濾以及價格、銷量等進行排序。

圖片圖片

可以看到搜索功能還是比較復雜的,在 waynboot-mall 項目中,這些邏輯全部在 Elasticsearch 內部進行處理,代碼如下:

@RestController
    @AllArgsConstructor
    @RequestMapping("search")
    public class SearchController extends BaseController {
        private IGoodsService iGoodsService;
        private ElasticDocument elasticDocument;

        @GetMapping("result")
        public R result(SearchVO searchVO) throws IOException {
            // 獲取篩選、排序條件
            Long memberId = MobileSecurityUtils.getUserId();
            String keyword = searchVO.getKeyword();
            Boolean filterNew = searchVO.getFilterNew();
            Boolean filterHot = searchVO.getFilterHot();
            Boolean isNew = searchVO.getIsNew();
            Boolean isHot = searchVO.getIsHot();
            Boolean isPrice = searchVO.getIsPrice();
            Boolean isSales = searchVO.getIsSales();
            String orderBy = searchVO.getOrderBy();
            SearchHistory searchHistory = new SearchHistory();
            if (memberId != null && StringUtils.isNotEmpty(keyword)) {
                searchHistory.setCreateTime(LocalDateTime.now());
                searchHistory.setUserId(memberId);
                searchHistory.setKeyword(keyword);
            }
            Page<SearchVO> page = getPage();
            // 查詢包含關鍵字、已上架商品
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
            MatchQueryBuilder matchFiler = QueryBuilders.matchQuery("isOnSale", true);
            MatchQueryBuilder matchQuery = QueryBuilders.matchQuery("name", keyword);
            MatchPhraseQueryBuilder matchPhraseQueryBuilder = QueryBuilders.matchPhraseQuery("keyword", keyword);
            boolQueryBuilder.filter(matchFiler).should(matchQuery).should(matchPhraseQueryBuilder).minimumShouldMatch(1);
            searchSourceBuilder.timeout(new TimeValue(10, TimeUnit.SECONDS));
            // 按是否新品排序
            if (isNew) {
                searchSourceBuilder.sort(new FieldSortBuilder("isNew").order(SortOrder.DESC));
            }
            // 按是否熱品排序
            if (isHot) {
                searchSourceBuilder.sort(new FieldSortBuilder("isHot").order(SortOrder.DESC));
            }
            // 按價格高低排序
            if (isPrice) {
                searchSourceBuilder.sort(new FieldSortBuilder("retailPrice").order("asc".equals(orderBy) ? SortOrder.ASC : SortOrder.DESC));
            }
            // 按銷量排序
            if (isSales) {
                searchSourceBuilder.sort(new FieldSortBuilder("sales").order(SortOrder.DESC));
            }
            // 篩選新品
            if (filterNew) {
                MatchQueryBuilder filterQuery = QueryBuilders.matchQuery("isNew", true);
                boolQueryBuilder.filter(filterQuery);
            }
            // 篩選熱品
            if (filterHot) {
                MatchQueryBuilder filterQuery = QueryBuilders.matchQuery("isHot", true);
                boolQueryBuilder.filter(filterQuery);
            }

            // 組裝Elasticsearch查詢條件
            searchSourceBuilder.query(boolQueryBuilder);
            // Elasticsearch分頁相關
            searchSourceBuilder.from((int) (page.getCurrent() - 1) * (int) page.getSize());
            searchSourceBuilder.size((int) page.getSize());
            // 執行Elasticsearch查詢
            List<JSONObject> list = elasticDocument.search("goods", searchSourceBuilder, JSONObject.class);
            List<Integer> goodsIdList = list.stream().map(jsonObject -> (Integer) jsonObject.get("id")).collect(Collectors.toList());
            if (goodsIdList.isEmpty()) {
                return R.success().add("goods", Collections.emptyList());
            }
            // 根據Elasticsearch中返回商品ID查詢商品詳情并保持es中的排序
            List<Goods> goodsList = iGoodsService.searchResult(goodsIdList);
            Map<Integer, Goods> goodsMap = goodsList.stream().collect(Collectors.toMap(goods -> Math.toIntExact(goods.getId()), o -> o));
            List<Goods> returnGoodsList = new ArrayList<>(goodsList.size());
            for (Integer goodsId : goodsIdList) {
                returnGoodsList.add(goodsMap.get(goodsId));
            }
            if (CollectionUtils.isNotEmpty(goodsList)) {
                AsyncManager.me().execute(new TimerTask() {
                    @Override
                    public void run() {
                        searchHistory.setHasGoods(true);
                        iSearchHistoryService.save(searchHistory);
                    }
                });
            }
            return R.success().add("goods", returnGoodsList);
        }
    }

這里對上面商城的搜索代碼給大家做一個講解:

  • 第一步:獲取篩選、排序條件
  • 第二步:獲取查詢條件-用戶搜索關鍵字、商品已上架
  • 第三步:獲取排序條件-按是否新品排序、按是否熱品排序、按價格高低排序、按銷量排序
  • 第四步:獲取過濾條件-篩選新品、篩選熱品
  • 第五步:組裝 Elasticsearch 查詢條件以及分頁條件
  • 第六步:執行 Elasticsearch 查詢操作
  • 第七步:獲取 Elasticsearch 中返回的商品 ID ,并根據商品 id 查詢商品詳情,最后商品保持 es 中的排序

總結一下

本文給大家講解了 waynboot-mall 項目中對于 elasticsearch 的使用以及代碼實戰講解。希望能幫助大家更好理解 elasticsearch,大家在自己的項目中如果要引入 elasticsearch,可以直接參照本文的示例代碼即可使用。

責任編輯:武曉燕 來源: 程序員wayn
相關推薦

2024-03-07 11:03:21

ElasticseaES索引

2023-07-03 15:55:05

語法jpa狀態

2023-11-10 08:17:01

分布式搜索引擎

2017-05-04 10:33:25

Elasticsearelasticsear安裝

2022-12-22 07:40:28

2022-12-27 07:39:28

RedisRedissonLettuce

2022-12-23 07:36:50

RedisLettuce技巧

2021-07-02 06:59:41

DockerElasticsear開源

2011-07-06 15:06:46

Xcode Cocoa

2013-08-20 18:50:46

JS模板引擎模塊化Web App

2024-04-10 07:48:41

搜索引擎場景

2024-03-26 00:00:01

2015-03-06 15:31:01

2020-09-07 11:30:47

ElasticSear索引Linux

2023-02-02 09:47:39

estext類型

2021-03-18 15:10:42

ElasticSearBeta日志

2020-07-07 09:19:28

Android 協程開發

2009-08-31 16:23:13

C#接口

2017-04-26 08:51:36

MongoDB集群實戰

2023-11-07 10:22:26

自動駕駛技術
點贊
收藏

51CTO技術棧公眾號

亚洲av电影一区| 国产精品23p| av日韩一区| 一区二区三区在线影院| 精品国产一区二区三区四区vr| 五月婷婷色丁香| 91日韩欧美| 亚洲国产成人精品久久久国产成人一区| 日日摸日日碰夜夜爽无码| 福利小视频在线观看| 国产精品一区二区不卡| 日韩av免费在线播放| 91麻豆精品成人一区二区| 日韩av中文字幕一区| 4438x成人网最大色成网站| 18禁网站免费无遮挡无码中文| 2017亚洲天堂1024| aaa欧美色吧激情视频| 国产日本欧美一区| 欧美特黄aaaaaa| 欧美精品播放| 色偷偷av一区二区三区乱| 欧美一区二区三区成人精品| 国产精品美女久久久久| 欧美性猛交xxxx乱大交退制版| 99热亚洲精品| 菠萝菠萝蜜在线视频免费观看| 久久精品亚洲国产奇米99| 国产中文欧美日韩在线| 国产91精品露脸国语对白| 国产精品va在线播放我和闺蜜| 久久午夜无码鲁丝片午夜精品| 欧美影院三区| 亚洲色图色老头| 波多野结衣加勒比| jizz国产精品| 日韩三区在线观看| 特级黄色片视频| 欧美91在线|欧美| 在线观看免费亚洲| 日韩视频第二页| 国产色播av在线| 亚洲成人综合网站| 日韩专区第三页| 91麻豆一二三四在线| 中文字幕一区二区三区四区不卡| 日韩经典在线视频| 国产色在线 com| 国产日韩欧美综合在线| 蜜桃视频在线观看成人| 天天摸天天干天天操| 北条麻妃一区二区三区| 成人区精品一区二区| 超碰福利在线观看| 国产精品 日产精品 欧美精品| 91亚洲人电影| www.久久伊人| 成人黄色一级视频| 国产视频不卡| 亚洲色图欧美视频| 久久久久99精品国产片| 神马影院一区二区三区| av在线第一页| 1区2区3区国产精品| 亚洲美女自拍偷拍| 欧美草逼视频| 欧美日韩美女在线| 国产激情在线观看视频| 国精产品一区一区三区四川| 欧美三级中文字幕在线观看| 蜜臀一区二区三区精品免费视频 | 国产69精品久久久久9| 激情四射综合网| 日韩网站在线| 国产成人一区二区三区| 中文字幕自拍偷拍| 国产精品亚洲第一区在线暖暖韩国| 4444kk亚洲人成电影在线| 黄色福利在线观看| 久久亚洲一区二区三区明星换脸| 日韩免费中文专区| 99riav在线| 亚洲综合丝袜美腿| 99re在线视频免费观看| 久久电影天堂| 亚洲精品一区二区三区蜜桃下载| 人妻丰满熟妇aⅴ无码| 欧美偷拍综合| 色在人av网站天堂精品| 亚洲AV无码成人精品区东京热| 日韩国产精品大片| 99在线观看视频| 青青操视频在线| 亚洲欧美怡红院| 免费在线观看视频a| av一区在线播放| 欧美成人乱码一区二区三区| 人妻少妇无码精品视频区| 影音先锋成人在线电影| 欧美一级黑人aaaaaaa做受| 91久久久久国产一区二区| 岛国精品在线播放| 亚洲欧美丝袜| 天堂а√在线最新版中文在线| 欧美特级限制片免费在线观看| 一级黄色片毛片| 色天天久久综合婷婷女18| 韩国日本不卡在线| 一级全黄裸体免费视频| 久久综合久久综合久久综合| 青青草原网站在线观看| 日韩不卡免费高清视频| 欧美va亚洲va香蕉在线 | 亚洲精品欧美综合四区| 无码人妻h动漫| 综合久久成人| 久久精品中文字幕一区| 91视频在线视频| 成人高清av在线| 可以在线看黄的网站| 日本中文字幕一区二区| 亚洲精品wwwww| 中文字幕影音先锋| 另类人妖一区二区av| 蜜桃视频成人| 欧美gv在线| 欧美成人激情免费网| 国产探花在线视频| 久久亚洲欧美| 欧美精品七区| 午夜不卡影院| 亚洲精品久久久久国产| 成人免费看片98| 国产精品一区二区男女羞羞无遮挡| 日韩一区二区电影在线观看| 九色porny丨国产首页在线| 日韩一二三区不卡| 黄色片子在线观看| 精品中文字幕一区二区小辣椒 | 欧美日一区二区三区在线观看国产免| 国产精品欧美一区二区| 精品无人乱码| 在线一区二区视频| 日本性高潮视频| 日日摸夜夜添夜夜添国产精品 | 黄色电影免费在线看| 欧美日韩国产在线播放| 久久久久亚洲AV成人无码国产| 亚洲私人影院| 国产日韩亚洲精品| 在线观看特色大片免费视频| 日韩激情在线视频| 日韩视频在线观看一区| 久久久久国产一区二区三区四区| 91看片就是不一样| 久久精品国产68国产精品亚洲| 国产精品久久视频| 暖暖日本在线观看| 69成人精品免费视频| 四虎影院中文字幕| 福利一区二区在线| 日韩小视频在线播放| 无码少妇一区二区三区| 日韩美女免费线视频| 国际av在线| 欧美另类z0zxhd电影| 亚洲伦理一区二区三区| 国产经典欧美精品| 无码人妻精品一区二区三区在线| 婷婷综合一区| 国产精品视频一区二区三区四| 欧美成人三区| 亚洲成人激情图| 国产九色在线播放九色| 中文字幕第一区二区| 亚洲va在线va天堂va偷拍| 午夜亚洲福利| 久久久久久久有限公司| 国产福利一区二区三区在线播放| 日韩视频一区在线| 欧洲成人一区二区三区| 色诱亚洲精品久久久久久| 日本黄区免费视频观看| 大尺度一区二区| 免费看a级黄色片| 欧美另类视频| 欧美日韩精品综合| 警花av一区二区三区| 欧美在线视频一区二区| 国产cdts系列另类在线观看| 亚洲缚视频在线观看| 在线播放国产一区| 亚洲成人动漫一区| 蜜桃av免费观看| 懂色av中文一区二区三区 | 欧美aaa大片视频一二区| 久久伊人精品天天| 暖暖视频在线免费观看| 日韩视频免费直播| 夜夜爽妓女8888视频免费观看| 亚洲精品视频在线观看免费 | 自拍av一区二区三区| 中文字幕在线视频播放| 免费成人小视频| 黄色成人在线看| 中文字幕一区二区三区欧美日韩| 欧美日本韩国在线| 亚洲成人偷拍| 国产精品永久免费在线| 男人久久天堂| 欧美激情亚洲一区| 免费高清在线观看| 亚洲色图第三页| 天堂网av在线播放| 日韩欧美在线影院| 亚洲天堂网在线视频| 色综合中文字幕| 久久精品视频8| 综合在线观看色| jizz中文字幕| 26uuu精品一区二区在线观看| 色男人天堂av| 精久久久久久久久久久| av免费网站观看| 国产精品夜夜夜| 97超碰在线人人| 欧美日韩亚洲一区| 不卡中文字幕在线| 日韩欧美精品| 亚洲看片网站| 日韩欧美高清| 亚洲一卡二卡三卡四卡无卡网站在线看| 同性恋视频一区| 久久综合久久综合这里只有精品| 18国产精品| av资源一区二区| 在线观看视频一区二区三区| 亚洲jizzjizz日本少妇| 国产精品视频一区二区三区| 成人福利网站在线观看11| 51一区二区三区| 国产精品久久久久久影视| 手机看片久久| 国产精品久久久| 国产超碰精品| 国产免费一区二区三区香蕉精| 九色成人搞黄网站| 国产日韩视频在线观看| 欧美国产视频| 91香蕉嫩草影院入口| 经典三级久久| 成人黄色在线免费观看| 一区二区三区亚洲变态调教大结局| 97久草视频| 国产精品美女在线观看直播| 国产亚洲第一区| 青青久久av| 日韩欧美在线观看强乱免费| 成人羞羞视频在线看网址| 亚洲国产精品久久久久婷婷老年| 成人精品视频| 麻豆视频传媒入口| 韩国亚洲精品| 欧美a在线视频| 男女视频一区二区| 在线观看免费视频污| 成人自拍视频在线观看| 狠狠人妻久久久久久综合蜜桃| 久久夜色精品一区| www中文在线| 一区二区三区色| 日韩中文字幕在线观看视频| 在线观看欧美精品| 国产av无码专区亚洲a∨毛片| 亚洲国产精品久久久久秋霞蜜臀 | 国产日韩欧美不卡| 熟女av一区二区| 午夜一区二区三区在线观看| 无码人妻精品一区二区三区不卡| 欧美人狂配大交3d怪物一区| 国产成年妇视频| 日韩成人av网址| 日本蜜桃在线观看| 久久久久这里只有精品| 四虎影视4hu4虎成人| 亚洲综合视频1区| 亚洲涩涩av| 在线观看污视频| 亚洲欧美日本国产专区一区| 中文字幕线观看| 91在线云播放| √天堂中文官网8在线| 亚洲va韩国va欧美va| 日本成人一级片| 精品99久久久久久| 69久久久久| 1769国产精品| 日韩欧美中文字幕一区二区三区| 欧美日韩精品久久久免费观看| 欧美日本不卡| 91福利国产成人精品播放| 国产91丝袜在线观看| 久久精品在线观看视频| 欧美日韩国产中文字幕| 国产高潮流白浆喷水视频| 亚洲午夜国产成人av电影男同| 欧美xxxx少妇| 91精品久久久久久久久中文字幕| 日本午夜精品| 欧美这里只有精品| 久久国产精品第一页| 波多野结衣av在线观看| 亚洲成av人片www| 国产三级三级在线观看| 国产亚洲免费的视频看| 自拍网站在线观看| 俄罗斯精品一区二区| 国产精品久久久久久麻豆一区软件 | 成年午夜在线| 欧美综合第一页| 国产精品videossex| 性生活免费观看视频| 美女网站在线免费欧美精品| 亚洲最大的黄色网| 亚洲国产另类av| 亚洲国产日韩在线观看| 久久人人爽人人爽爽久久| а√天堂资源国产精品| 日韩久久在线| 日韩综合在线视频| b站大片免费直播| 福利一区视频在线观看| 好男人在线视频www| 久久久久久国产免费 | 品久久久久久久久久96高清| 在线欧美一区| 午夜男人的天堂| 午夜亚洲福利老司机| 好男人在线视频www| 欧美激情一区二区久久久| 日韩影片在线观看| 大胆欧美熟妇xx| 国产成人精品免费| 久久久久成人网站| 精品国产一区二区三区久久久蜜月 | 成人亚洲免费视频| 国产精品色一区二区三区| 中文字幕有码视频| www国产精品视频| 精品国产亚洲一区二区三区大结局 | 少妇欧美激情一区二区三区| 亚洲欧美日韩一区| 亚洲国产精品一| 51精品在线观看| 国产成人影院| 色播五月激情五月| 亚洲男人的天堂在线aⅴ视频| 精品人妻一区二区三区四区不卡 | 青青草视频在线观看免费| 亚洲欧美激情一区| 浪潮色综合久久天堂| 亚洲国产欧洲综合997久久 | av香蕉成人| 成人欧美视频在线| 亚洲欧美日韩国产一区| 亚洲欧洲久久久| 欧美高清视频在线高清观看mv色露露十八 | 国产91在线视频观看| 国产日产欧美一区二区视频| 夜夜爽8888| 久久久噜噜噜久久中文字免| 亚洲精品进入| 午夜免费看毛片| 亚洲电影激情视频网站| 免费人成在线观看网站| 成人在线免费观看视视频| 欧美三区美女| 99久久久无码国产精品性 | 天堂av一区二区三区| 国产成人精品日本亚洲| 无码一区二区三区视频| 又黄又爽的网站| 欧美日韩电影一区| 182在线视频观看| 午夜精品一区二区三区四区 | 欧美精品久久一区| 97人澡人人添人人爽欧美| 亚洲韩国在线| 成人性色生活片| 怡春院在线视频| 久久乐国产精品| 色777狠狠狠综合伊人| 国产精品入口麻豆| 欧美军同video69gay| 女海盗2成人h版中文字幕| 国产av第一区| 国产亚洲自拍一区| 后入内射欧美99二区视频| 国产精品偷伦视频免费观看国产| 亚洲免费成人|