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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

springCloud学习【4】之elasticsearch(1)

發(fā)布時間:2024/1/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springCloud学习【4】之elasticsearch(1) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一 初識elasticsearch
    • 1.1 認(rèn)識ES
    • 1.2 基知:倒排索引
    • 1.3 正向和倒排總結(jié)
    • 1.4 es基礎(chǔ)概念
  • 二 安裝elasticsearch
    • 2.1 部署部署單點(diǎn)es
      • 2.1.1 創(chuàng)建網(wǎng)絡(luò)
      • 2.1.2 下載鏡像
      • 2.1.3 加載鏡像
      • 2.1.4 運(yùn)行
      • 2.1.5 訪問
    • 2.2 部署kibana
      • 2.2.1 下載鏡像
      • 2.2.2 加載鏡像
      • 2.2.3 運(yùn)行kibana
      • 2.2.4 查看日志
      • 2.2.5 使用DevTools
    • 2.3 安裝IK分詞器
      • 2.3.1 在線安裝ik插件(較慢)
      • 2.3.2 離線安裝ik插件(推薦)
    • 2.4 拓展詞典
    • 2.5 停用詞詞典
    • 2.6 部署es集群【補(bǔ)充】
  • 三 索引庫操作
    • 3.1 mapping映射屬性
    • 3.2 創(chuàng)建索引庫和映射
    • 3.3 查詢索引庫
    • 3.4 修改索引庫
    • 3.5 刪除索引庫
    • 3.6 總結(jié)
  • 四 文檔操作
    • 4.1 新增文檔
    • 4.2 查詢文檔
    • 4.3 刪除文檔
    • 4.4 修改文檔
    • 4.5 總結(jié)
  • 五 RestAPI
    • 5.1 分析數(shù)據(jù)結(jié)構(gòu):apping映射分析
    • 5.2 初始化RestClient
    • 5.3 創(chuàng)建索引庫
    • 5.4 刪除索引庫
    • 5.5 判斷索引庫存在
    • 5.6 總結(jié)
  • 六 RestClient操作文檔
    • 6.1 新增文檔
    • 6.2 查詢文檔
    • 6.3 修改文檔
    • 6.4 刪除文檔
    • 6.5 批量導(dǎo)入文檔
    • 6.6 小結(jié)

一 初識elasticsearch

1.1 認(rèn)識ES

  • elasticsearch的作用
    • elasticsearch是一款非常強(qiáng)大的開源搜索引擎,具備非常多強(qiáng)大功能,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容

  • ELK技術(shù)棧
    • elasticsearch結(jié)合kibana、Logstash、Beats,也就是elastic stack(ELK)。被廣泛應(yīng)用在日志數(shù)據(jù)分析、實(shí)時監(jiān)控等領(lǐng)域:
    • 而elasticsearch是elastic stack的核心,負(fù)責(zé)存儲、搜索、分析數(shù)據(jù)。

  • elasticsearch和lucene
    • elasticsearch底層是基于lucene來實(shí)現(xiàn)的。
    • Lucene是一個Java語言的搜索引擎類庫,是Apache公司的頂級項(xiàng)目,由DougCutting于1999年研發(fā)。

  • elasticsearch的發(fā)展歷史:
    • 2004年Shay Banon基于Lucene開發(fā)了Compass
    • 2010年Shay Banon 重寫了Compass,取名為Elasticsearch。

1.2 基知:倒排索引

  • 倒排索引的概念是基于MySQL這樣的正向索引而言的。
  • 正向索引:
    • 基于文檔id創(chuàng)建索引。查詢詞條時必須先找到文檔,而后判斷是否包含詞條

  • 逐行掃描,也就是全表掃描,隨著數(shù)據(jù)量增加,其查詢效率也會越來越低。當(dāng)數(shù)據(jù)量達(dá)到數(shù)百萬時,就是一場災(zāi)難。
  • elasticsearch采用倒排索引
    • 文檔(document):用來搜索的數(shù)據(jù),每條數(shù)據(jù)就是一個文檔 例如:一個網(wǎng)頁、一個商品信息
    • 詞條(term):對文檔數(shù)據(jù)或用戶搜索數(shù)據(jù),利用某種算法分詞,得到的具備含義的詞語就是詞條。 例如:我是中國人,就可以分為:我、是、中國人、中國、國人這樣的幾個詞條
  • 創(chuàng)建倒排索引是對正向索引的一種特殊處理,流程如下:
  • 將每一個文檔的數(shù)據(jù)利用算法分詞,得到一個個詞條
  • 創(chuàng)建表,每行數(shù)據(jù)包括詞條、詞條所在文檔id、位置等信息
  • 因?yàn)樵~條唯一性,可以給詞條創(chuàng)建索引,例如hash表結(jié)構(gòu)索引
  • 倒排索引的搜索流程如下(以搜索"華為手機(jī)"為例):
    • 1)用戶輸入條件"華為手機(jī)"進(jìn)行搜索。
    • 2)對用戶輸入內(nèi)容分詞,得到詞條:華為、手機(jī)。
    • 3)拿著詞條在倒排索引中查找,可以得到包含詞條的文檔id:1、2、3。
    • 4)拿著文檔id到正向索引中查找具體文檔。
  • 雖然要先查詢倒排索引,再查詢倒排索引,但是無論是詞條、還是文檔id都建立了索引,查詢速度非常快!無需全表掃描。

  • posting list
  • 倒排索引中包含兩部分內(nèi)容:
    • 詞條詞典(Term Dictionary):記錄所有詞條,以及詞條與倒排列表(Posting List)之間的關(guān)系,會給詞條創(chuàng)建索引,提高查詢和插入效率
    • 倒排列表(Posting List):記錄詞條所在的文檔id、詞條出現(xiàn)頻率 、詞條在文檔中的位置等信息
      • 文檔id:用于快速獲取文檔
      • 詞條頻率(TF):文檔在詞條出現(xiàn)的次數(shù),用于評分

1.3 正向和倒排總結(jié)

  • 正向索引是最傳統(tǒng)的,根據(jù)id索引的方式。但根據(jù)詞條查詢時,必須先逐條獲取每個文檔,然后判斷文檔中是否包含所需要的詞條,是根據(jù)文檔找詞條的過程
  • 倒排索引則相反,是先找到用戶要搜索的詞條,根據(jù)詞條得到保護(hù)詞條的文檔的id,然后根據(jù)id獲取文檔。是根據(jù)詞條找文檔的過程
  • 正向索引
    • 優(yōu)點(diǎn):
      • 可以給多個字段創(chuàng)建索引
      • 根據(jù)索引字段搜索、排序速度非常快
    • 缺點(diǎn):
      • 根據(jù)非索引字段,或者索引字段中的部分詞條查找時,只能全表掃描。
  • 倒排索引
    • 優(yōu)點(diǎn):
      • 根據(jù)詞條搜索、模糊搜索時,速度非常快
    • 缺點(diǎn):
      • 只能給詞條創(chuàng)建索引,而不是字段
      • 無法根據(jù)字段做排序

1.4 es基礎(chǔ)概念

  • 文檔和字段
    • elasticsearch是面向文檔(Document) 存儲的,可以是數(shù)據(jù)庫中的一條商品數(shù)據(jù),一個訂單信息。
    • 文檔數(shù)據(jù)會被序列化為json格式后存儲在elasticsearch中,而Json文檔中往往包含很多的字段(Field)

  • 索引和映射
    • 索引(Index),就是相同類型的文檔的集合。
    • 映射(mapping):索引中文檔的字段約束信息,類似表的結(jié)構(gòu)約束

  • **mysql與elasticsearch的概念對比:加粗樣式
MySQLElasticsearch說明
TableIndex索引(index),就是文檔的集合,類似數(shù)據(jù)庫的表(table)
RowDocument文檔(Document),就是一條條的數(shù)據(jù),類似數(shù)據(jù)庫中的行(Row),文檔都是JSON格式
ColumnField字段(Field),就是JSON文檔中的字段,類似數(shù)據(jù)庫中的列(Column)
SchemaMappingMapping(映射)是索引中文檔的約束,例如字段類型約束。類似數(shù)據(jù)庫的表結(jié)構(gòu)(Schema)
SQLDSLDSL是elasticsearch提供的JSON風(fēng)格的請求語句,用來操作elasticsearch,實(shí)現(xiàn)CRUD

  • 架構(gòu)
    • Mysql:擅長事務(wù)類型操作,可以確保數(shù)據(jù)的安全和一致性
    • Elasticsearch:擅長海量數(shù)據(jù)的搜索、分析、計算
  • 因此在企業(yè)中,往往是兩者結(jié)合使用:
    • 對安全性要求較高的寫操作,使用mysql實(shí)現(xiàn)
    • 對查詢性能要求較高的搜索需求,使用elasticsearch實(shí)現(xiàn)
    • 兩者再基于某種方式,實(shí)現(xiàn)數(shù)據(jù)的同步,保證一致性

二 安裝elasticsearch

2.1 部署部署單點(diǎn)es

2.1.1 創(chuàng)建網(wǎng)絡(luò)

  • 因?yàn)檫€需要部署kibana容器,因此需要讓es和kibana容器互聯(lián)。先創(chuàng)建一個網(wǎng)絡(luò):docker network create es-net

2.1.2 下載鏡像

  • 這里采用elasticsearch的7.12.1版本的鏡像,不建議pull。
  • Elasticsearch中文社區(qū)下載地址

    • 記得將壓縮包的名稱修改為es.tar

2.1.3 加載鏡像

[root@kongyue ~]# systemctl start docker [root@kongyue ~]# cd /tmp/ [root@kongyue tmp]# docker load -i es.tar 2653d992f4ef: Loading layer [==================================================>] 216.5MB/216.5MB 0ba8eff8aa04: Loading layer [==================================================>] 101.4MB/101.4MB 2a944434ad00: Loading layer [==================================================>] 314.9kB/314.9kB ade95a7611c0: Loading layer [==================================================>] 543.9MB/543.9MB 09a575a6e776: Loading layer [==================================================>] 26.62kB/26.62kB 498ae65924d7: Loading layer [==================================================>] 7.68kB/7.68kB 36b3f8db7aaa: Loading layer [==================================================>] 490.5kB/490.5kB Loaded image: elasticsearch:7.12.1

2.1.4 運(yùn)行

docker run -d \--name es \-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \-e "discovery.type=single-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/usr/share/elasticsearch/plugins \--privileged \--network es-net \-p 9200:9200 \-p 9300:9300 \ elasticsearch:7.12.1

命令解釋:

  • -e "cluster.name=es-docker-cluster":設(shè)置集群名稱
  • -e "http.host=0.0.0.0":監(jiān)聽的地址,可以外網(wǎng)訪問
  • -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":內(nèi)存大小
  • -e "discovery.type=single-node":非集群模式
  • -v es-data:/usr/share/elasticsearch/data:掛載邏輯卷,綁定es的數(shù)據(jù)目錄
  • -v es-logs:/usr/share/elasticsearch/logs:掛載邏輯卷,綁定es的日志目錄
  • -v es-plugins:/usr/share/elasticsearch/plugins:掛載邏輯卷,綁定es的插件目錄
  • --privileged:授予邏輯卷訪問權(quán)
  • --network es-net :加入一個名為es-net的網(wǎng)絡(luò)中
  • -p 9200:9200:端口映射配置
[root@kongyue tmp]# docker run -d \ > --name es \ > -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \ > -e "discovery.type=single-node" \ > -v es-data:/usr/share/elasticsearch/data \ > -v es-plugins:/usr/share/elasticsearch/plugins \ > --privileged \ > --network es-net \ > -p 9200:9200 \ > -p 9300:9300 \ > elasticsearch:7.12.1 f1f899239f106e6f0718b632383ed0401cb4b8e96772a7cb1e0d3c890862cfb6

2.1.5 訪問

  • 訪問:http://xxx.xxx.xxx.xxx:9200 即可看到elasticsearch的響應(yīng)結(jié)果:

2.2 部署kibana

2.2.1 下載鏡像

  • 官方地址Download Kibana
  • Elasticsearch中文社區(qū)下載地址
    • 記得將壓縮包的名稱修改為kibana.tar

2.2.2 加載鏡像

[root@kongyue tmp]# docker load -i kibana.tar d797e87ed4ce: Loading layer [==================================================>] 112.9MB/112.9MB 80ce41fc1f8a: Loading layer [==================================================>] 26.62kB/26.62kB 3345a8ffd0ea: Loading layer [==================================================>] 3.584kB/3.584kB d736a1702974: Loading layer [==================================================>] 20.34MB/20.34MB 570575469db2: Loading layer [==================================================>] 56.83kB/56.83kB 459d502a3562: Loading layer [==================================================>] 770.7MB/770.7MB f22a9f0649d0: Loading layer [==================================================>] 2.048kB/2.048kB 4b66f24ba0de: Loading layer [==================================================>] 4.096kB/4.096kB 0a50faa06266: Loading layer [==================================================>] 15.36kB/15.36kB 8a310ff91413: Loading layer [==================================================>] 4.096kB/4.096kB 5997553ddc84: Loading layer [==================================================>] 479.2kB/479.2kB f87dadd7c340: Loading layer [==================================================>] 309.8kB/309.8kB Loaded image: kibana:7.12.1

2.2.3 運(yùn)行kibana

  • kibana啟動一般比較慢,需要多等待一會
[root@kongyue tmp]# docker run -d \ > --name kibana \ > -e ELASTICSEARCH_HOSTS=http://es:9200 \ > --network=es-net \ > -p 5601:5601 \ > kibana:7.12.1 d8ade4066ec86d48c10effe249b65c122b63bd6734b1708b941a221bc633be78
  • --network es-net :加入一個名為es-net的網(wǎng)絡(luò)中,與elasticsearch在同一個網(wǎng)絡(luò)中
  • -e ELASTICSEARCH_HOSTS=http://es:9200":設(shè)置elasticsearch的地址,因?yàn)閗ibana已經(jīng)與elasticsearch在一個網(wǎng)絡(luò),因此可以用容器名直接訪問elasticsearch
  • -p 5601:5601:端口映射配置

2.2.4 查看日志

  • 可以通過命令,查看運(yùn)行日志:docker logs -f kibana
  • 當(dāng)查看到下面的日志,說明成功:{"type":"log","@timestamp":"2023-03-24T05:05:05+00:00","tags":["info","http","server","Kibana"],"pid":7,"message":"http server running at http://0.0.0.0:5601"}

2.2.5 使用DevTools

  • 訪問http://xxx.xxx.xxx.xxx:5601,即可看到以下頁面,選擇Explore on my own
  • 選擇開發(fā)工具
  • 然后進(jìn)入以下界面
  • 界面中可以編寫DSL來操作elasticsearch。并且對DSL語句有自動補(bǔ)全功能。

2.3 安裝IK分詞器

2.3.1 在線安裝ik插件(較慢)

# 進(jìn)入容器內(nèi)部 docker exec -it elasticsearch /bin/bash# 在線下載并安裝 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip#退出 exit #重啟容器 docker restart elasticsearch

2.3.2 離線安裝ik插件(推薦)

  • 查看數(shù)據(jù)卷目錄
    • 安裝插件需要知道elasticsearch的plugins目錄位置,而我們用了數(shù)據(jù)卷掛載,因此需要查看elasticsearch的數(shù)據(jù)卷目錄
    • 通過下面命令查看:docker volume inspect es-plugins
    • 顯示結(jié)果:[root@kongyue tmp]# docker volume inspect es-plugins [{"CreatedAt": "2023-03-24T12:51:40+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/es-plugins/_data","Name": "es-plugins","Options": null,"Scope": "local"} ]
      • 說明plugins目錄被掛載到了:/var/lib/docker/volumes/es-plugins/_data 這個目錄中。
  • 下載IK分詞器
    • Elasticsearch中文社區(qū)下載地址
  • 解壓縮分詞器安裝包
    • 把ik分詞器解壓縮,重命名為ik
  • 上傳到es容器的插件數(shù)據(jù)卷中
    • 將ik文件夾上傳到查詢出來的掛載目錄
  • 重啟容器
  • # 重啟容器 docker restart es # 查看es日志 docker logs -f es
  • 測試:
    • IK分詞器包含兩種模式:
      • ik_smart:最少切分
      • ik_max_word:最細(xì)切分
    GET /_analyze {"analyzer": "ik_max_word","text": "天生我才必有用,大可不必獨(dú)嘆息" } {"tokens" : [{"token" : "天生我才必有用","start_offset" : 0,"end_offset" : 7,"type" : "CN_WORD","position" : 0},{"token" : "天生我才","start_offset" : 0,"end_offset" : 4,"type" : "CN_WORD","position" : 1},{"token" : "天生","start_offset" : 0,"end_offset" : 2,"type" : "CN_WORD","position" : 2},{"token" : "我","start_offset" : 2,"end_offset" : 3,"type" : "CN_CHAR","position" : 3},{"token" : "才","start_offset" : 3,"end_offset" : 4,"type" : "CN_CHAR","position" : 4},{"token" : "必有用","start_offset" : 4,"end_offset" : 7,"type" : "CN_WORD","position" : 5},{"token" : "必有","start_offset" : 4,"end_offset" : 6,"type" : "CN_WORD","position" : 6},{"token" : "有用","start_offset" : 5,"end_offset" : 7,"type" : "CN_WORD","position" : 7},{"token" : "大可不必","start_offset" : 8,"end_offset" : 12,"type" : "CN_WORD","position" : 8},{"token" : "大可","start_offset" : 8,"end_offset" : 10,"type" : "CN_WORD","position" : 9},{"token" : "可不","start_offset" : 9,"end_offset" : 11,"type" : "CN_WORD","position" : 10},{"token" : "不必","start_offset" : 10,"end_offset" : 12,"type" : "CN_WORD","position" : 11},{"token" : "獨(dú)","start_offset" : 12,"end_offset" : 13,"type" : "CN_CHAR","position" : 12},{"token" : "嘆息","start_offset" : 13,"end_offset" : 15,"type" : "CN_WORD","position" : 13}] }

    2.4 拓展詞典

    • 隨著互聯(lián)網(wǎng)的發(fā)展,出現(xiàn)了很多新的詞語,在原有的詞匯列表中并不存在。所以我們的詞匯也需要不斷的更新,IK分詞器提供了擴(kuò)展詞匯的功能。
  • 打開IK分詞器config目錄:
  • 在IKAnalyzer.cfg.xml配置文件內(nèi)容添加:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties><comment>IK Analyzer 擴(kuò)展配置</comment><!--用戶可以在這里配置自己的擴(kuò)展字典 *** 添加擴(kuò)展詞典--><entry key="ext_dict">ext.dic</entry> </properties>
  • 新建一個 ext.dic,可以參考config目錄下復(fù)制一個配置文件進(jìn)行修改
    • 注意當(dāng)前文件的編碼必須是 UTF-8 格式
  • emo 芭比Q了
  • 重啟elasticsearch
  • docker restart es
  • 測試效果:
  • GET /_analyze {"analyzer": "ik_max_word","text": "競爭太激烈,這次面試又芭比Q了,我真的很emo" } {"token" : "emo","start_offset" : 20,"end_offset" : 23,"type" : "ENGLISH","position" : 13 }

    2.5 停用詞詞典

    • 在互聯(lián)網(wǎng)項(xiàng)目中,在網(wǎng)絡(luò)間傳輸?shù)乃俣群芸?#xff0c;所以很多語言是不允許在網(wǎng)絡(luò)上傳遞的,如:關(guān)于宗教、政治等敏感詞語,那么我們在搜索時也應(yīng)該忽略當(dāng)前詞匯。
    • IK分詞器也提供了強(qiáng)大的停用詞功能,讓我們在索引時就直接忽略當(dāng)前的停用詞匯表中的內(nèi)容。
  • IKAnalyzer.cfg.xml配置文件內(nèi)容添加:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties><comment>IK Analyzer 擴(kuò)展配置</comment><!--用戶可以在這里配置自己的擴(kuò)展字典--><entry key="ext_dict">ext.dic</entry><!--用戶可以在這里配置自己的擴(kuò)展停止詞字典 *** 添加停用詞詞典--><entry key="ext_stopwords">stopword.dic</entry> </properties>
  • 在 stopword.dic 添加停用詞
    • 注意當(dāng)前文件的編碼必須是 UTF-8 格式
    草泥馬 特么的
  • 重啟elasticsearch# 重啟服務(wù) docker restart elasticsearch docker restart kibana
  • 測試效果GET /_analyze {"analyzer": "ik_max_word","text": "草泥馬,特么的,都是不文明網(wǎng)絡(luò)用語" } {"tokens" : [{"token" : "草","start_offset" : 0,"end_offset" : 1,"type" : "CN_CHAR","position" : 0},{"token" : "泥","start_offset" : 1,"end_offset" : 2,"type" : "CN_CHAR","position" : 1},{"token" : "馬","start_offset" : 2,"end_offset" : 3,"type" : "CN_CHAR","position" : 2},{"token" : "特","start_offset" : 4,"end_offset" : 5,"type" : "CN_CHAR","position" : 3},{"token" : "么","start_offset" : 5,"end_offset" : 6,"type" : "CN_CHAR","position" : 4},{"token" : "的","start_offset" : 6,"end_offset" : 7,"type" : "CN_CHAR","position" : 5},{"token" : "都是","start_offset" : 8,"end_offset" : 10,"type" : "CN_WORD","position" : 6},{"token" : "不文明","start_offset" : 10,"end_offset" : 13,"type" : "CN_WORD","position" : 7},{"token" : "不文","start_offset" : 10,"end_offset" : 12,"type" : "CN_WORD","position" : 8},{"token" : "文明","start_offset" : 11,"end_offset" : 13,"type" : "CN_WORD","position" : 9},{"token" : "網(wǎng)絡(luò)","start_offset" : 13,"end_offset" : 15,"type" : "CN_WORD","position" : 10},{"token" : "用語","start_offset" : 15,"end_offset" : 17,"type" : "CN_WORD","position" : 11}] }
  • 2.6 部署es集群【補(bǔ)充】

    • 部署es集群可以直接使用docker-compose來完成,不過要求你的Linux虛擬機(jī)至少有4G的內(nèi)存空間
  • 首先編寫一個docker-compose文件,內(nèi)容如下:version: '2.2' services:es01:image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1container_name: es01environment:- node.name=es01- cluster.name=es-docker-cluster- discovery.seed_hosts=es02,es03- cluster.initial_master_nodes=es01,es02,es03- bootstrap.memory_lock=true- "ES_JAVA_OPTS=-Xms512m -Xmx512m"ulimits:memlock:soft: -1hard: -1volumes:- data01:/usr/share/elasticsearch/dataports:- 9200:9200networks:- elastices02:image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1container_name: es02environment:- node.name=es02- cluster.name=es-docker-cluster- discovery.seed_hosts=es01,es03- cluster.initial_master_nodes=es01,es02,es03- bootstrap.memory_lock=true- "ES_JAVA_OPTS=-Xms512m -Xmx512m"ulimits:memlock:soft: -1hard: -1volumes:- data02:/usr/share/elasticsearch/datanetworks:- elastices03:image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1container_name: es03environment:- node.name=es03- cluster.name=es-docker-cluster- discovery.seed_hosts=es01,es02- cluster.initial_master_nodes=es01,es02,es03- bootstrap.memory_lock=true- "ES_JAVA_OPTS=-Xms512m -Xmx512m"ulimits:memlock:soft: -1hard: -1volumes:- data03:/usr/share/elasticsearch/datanetworks:- elasticvolumes:data01:driver: localdata02:driver: localdata03:driver: localnetworks:elastic:driver: bridge
  • Run docker-compose to bring up the cluster:docker-compose up
  • 三 索引庫操作

    • 索引庫就類似數(shù)據(jù)庫表,mapping映射就類似表的結(jié)構(gòu)。要向es中存儲數(shù)據(jù),必須先創(chuàng)建“庫”和“表”。
    • 使用統(tǒng)一使用Kibana編寫DSL的方式來演示

    3.1 mapping映射屬性

    • type:字段數(shù)據(jù)類型,常見的簡單類型有:
      • 字符串:text(可分詞的文本)、keyword(精確值,例如:品牌、國家、ip地址)
      • 數(shù)值:long、integer、short、byte、double、float、
      • 布爾:boolean
      • 日期:date
      • 對象:object
    • index:是否創(chuàng)建索引,默認(rèn)為true
    • analyzer:使用哪種分詞器
    • properties:該字段的子字段

    • 舉例:{"age": 21,"weight": 52.1,"isMarried": false,"info": "武神","email": "zy@itcast.cn","score": [99.1, 99.5, 98.9],"name": {"firstName": "云","lastName": "趙"} }
    • 對應(yīng)的每個字段映射(mapping):
      • age:類型為 integer;參與搜索,因此需要index為true;無需分詞器
      • weight:類型為float;參與搜索,因此需要index為true;無需分詞器
      • isMarried:類型為boolean;參與搜索,因此需要index為true;無需分詞器
      • info:類型為字符串,需要分詞,因此是text;參與搜索,因此需要index為true;分詞器可以用ik_smart
      • email:類型為字符串,但是不需要分詞,因此是keyword;不參與搜索,因此需要index為false;無需分詞器
      • score:雖然是數(shù)組,但是我們只看元素的類型,類型為float;參與搜索,因此需要index為true;無需分詞器
      • name:類型為object,需要定義多個子屬性
        • name.firstName;類型為字符串,但是不需要分詞,因此是keyword;參與搜索,因此需要index為true;無需分詞器
        • name.lastName;類型為字符串,但是不需要分詞,因此是keyword;參與搜索,因此需要index為true;無需分詞器

    3.2 創(chuàng)建索引庫和映射

    • 基本語法:
      • 請求方式:PUT
      • 請求路徑:/索引庫名,可以自定義
      • 請求參數(shù):mapping映射
    • 格式:PUT /索引庫名稱 {"mappings": {"properties": {"字段名":{"type": "text","analyzer": "ik_smart"},"字段名2":{"type": "keyword","index": "false"},"字段名3":{"properties": {"子字段": {"type": "keyword"}}}}} }
    • 舉例:PUT /test01 {"mappings": {"properties": {"info":{"type": "text","analyzer": "ik_smart"},"email":{"type": "keyword","index": "false"},"name":{"properties": {"firstName": {"type": "keyword"}}}}} }
    • 演示結(jié)果:{"acknowledged" : true,"shards_acknowledged" : true,"index" : "test01" }

    3.3 查詢索引庫

    • 基本語法

      • 請求方式:GET
      • 請求路徑:/索引庫名
      • 請求參數(shù):無
    • 格式

      GET /索引庫名
    • 演示:

    3.4 修改索引庫

    • 倒排索引結(jié)構(gòu)雖然不復(fù)雜,但是一旦數(shù)據(jù)結(jié)構(gòu)改變(比如改變了分詞器),就需要重新創(chuàng)建倒排索引,這簡直是災(zāi)難。因此索引庫一旦創(chuàng)建,無法修改mapping
    • 雖然無法修改mapping中已有的字段,但是卻允許添加新的字段到mapping中,因?yàn)椴粫Φ古潘饕a(chǎn)生影響。
    • 語法說明PUT /索引庫名/_mapping {"properties": {"新字段名":{"type": "integer"}} }
    • 演示:

    3.5 刪除索引庫

    • 語法:
      • 請求方式:DELETE
      • 請求路徑:/索引庫名
      • 請求參數(shù):無
    • 格式:DELETE /索引庫名

    3.6 總結(jié)

    • 索引庫操作:
      • 創(chuàng)建索引庫:PUT /索引庫名
      • 查詢索引庫:GET /索引庫名
      • 刪除索引庫:DELETE /索引庫名
      • 添加字段:PUT /索引庫名/_mapping

    四 文檔操作

    4.1 新增文檔

    • 語法:POST /索引庫名/_doc/文檔id {"字段1": "值1","字段2": "值2","字段3": {"子屬性1": "值3","子屬性2": "值4"},// ... }
    • 演示:

    4.2 查詢文檔

    • 語法:GET /{索引庫名稱}/_doc/{id}
    • 通過kibana查看數(shù)據(jù):GET /heima/_doc/1
    • 演示:

    4.3 刪除文檔

    • 語法:DELETE /{索引庫名}/_doc/id值
    • 演示:

    4.4 修改文檔

    • 修改有兩種方式:
      • 全量修改:直接覆蓋原來的文檔
      • 增量修改:修改文檔中的部分字段

    • 全量修改
    • 全量修改是覆蓋原來的文檔,其本質(zhì)是:
      • 根據(jù)指定的id刪除文檔
      • 新增一個相同id的文檔
    • 注意:如果根據(jù)id刪除時,id不存在,第二步的新增也會執(zhí)行,也就從修改變成了新增操作了。
    • 語法:PUT /{索引庫名}/_doc/文檔id {"字段1": "值1","字段2": "值2",// ... 略 }
    • 演示:

    • 增量修改
    • 增量修改是只修改指定id匹配的文檔中的部分字段。
    • 語法:POST /{索引庫名}/_update/文檔id {"doc": {"字段名": "新的值"} }
    • 演示:

    4.5 總結(jié)

    • 文檔操作:
      • 創(chuàng)建文檔:POST /{索引庫名}/_doc/文檔id { json文檔 }
      • 查詢文檔:GET /{索引庫名}/_doc/文檔id
      • 刪除文檔:DELETE /{索引庫名}/_doc/文檔id
      • 修改文檔:
        • 全量修改:PUT /{索引庫名}/_doc/文檔id { json文檔 }
        • 增量修改:POST /{索引庫名}/_update/文檔id { "doc": {字段}}

    五 RestAPI

    • ES官方提供了各種不同語言的客戶端,用來操作ES。這些客戶端的本質(zhì)就是組裝DSL語句,通過http請求發(fā)送給ES。官方文檔地址
    • 其中的Java Rest Client又包括兩種:
      • Java Low Level Rest Client
      • Java High Level Rest Client
    • 這里使用Java HighLevel Rest Client客戶端API

    5.1 分析數(shù)據(jù)結(jié)構(gòu):apping映射分析

    • 創(chuàng)建索引庫,最關(guān)鍵的是mapping映射,而mapping映射要考慮的信息包括:
      • 字段名
      • 字段數(shù)據(jù)類型
      • 是否參與搜索
      • 是否需要分詞
      • 如果分詞,分詞器是什么?
    • 其中:
      • 字段名、字段數(shù)據(jù)類型,可以參考數(shù)據(jù)表結(jié)構(gòu)的名稱和類型
      • 是否參與搜索要分析業(yè)務(wù)來判斷,例如圖片地址,就無需參與搜索
      • 是否分詞呢要看內(nèi)容,內(nèi)容如果是一個整體就無需分詞,反之則要分詞
      • 分詞器,我們可以統(tǒng)一使用ik_max_word

    • 幾個特殊字段說明:
      • location:地理坐標(biāo),里面包含精度、緯度
      • all:一個組合字段,其目的是將多字段的值 利用copy_to合并,提供給用戶搜索
    • 地理坐標(biāo)說明:
    • copy_to說明:

    5.2 初始化RestClient

    • 在elasticsearch提供的API中,與elasticsearch一切交互都封裝在一個名為RestHighLevelClient的類中,必須先完成這個對象的初始化,建立與elasticsearch的連接。
    • 步驟分為三步:
    • 引入es的RestHighLevelClient依賴:
    • <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency>
    • 因?yàn)镾pringBoot默認(rèn)的ES版本是7.6.2,所以我們需要覆蓋默認(rèn)的ES版本:
    • <properties><java.version>1.8</java.version><elasticsearch.version>7.12.1</elasticsearch.version> </properties>
    • 初始化RestHighLevelClient:
    • RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://192.168.150.101:9200") ));
    • 測試,創(chuàng)建一個測試類HotelIndexTest,然后將初始化的代碼編寫在@BeforeEach方法中:
    • public class HotelIndexTest {private RestHighLevelClient client;@BeforeEachvoid setUp() {this.client = new RestHighLevelClient(RestClient.builder(//xxx.xxx.xxx.xxx 虛擬主機(jī)的IPHttpHost.create("http://xxx.xxx.xxx.xxx:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();} }

    5.3 創(chuàng)建索引庫

    • 代碼分為三步:
    • 創(chuàng)建Request對象。因?yàn)槭莿?chuàng)建索引庫的操作,因此Request是CreateIndexRequest。
    • 添加請求參數(shù),其實(shí)就是DSL的JSON參數(shù)部分。因?yàn)閖son字符串很長,這里是定義了靜態(tài)字符串常量MAPPING_TEMPLATE,讓代碼看起來更加優(yōu)雅。
    • 發(fā)送請求,client.indices()方法的返回值是IndicesClient類型,封裝了所有與索引庫操作有關(guān)的方法。
    • 演示
    //創(chuàng)建一個類,定義mapping映射的JSON字符串常量 class HotelConstants {public static final String MAPPING_TEMPLATE = "{\n" +" \"mappings\": {\n" +" \"properties\": {\n" +" \"id\": {\n" +" \"type\": \"keyword\"\n" +" },\n" +" \"name\":{\n" +" \"type\": \"text\",\n" +" \"analyzer\": \"ik_max_word\",\n" +" \"copy_to\": \"all\"\n" +" },\n" +" \"address\":{\n" +" \"type\": \"keyword\",\n" +" \"index\": false\n" +" },\n" +" \"price\":{\n" +" \"type\": \"integer\"\n" +" },\n" +" \"score\":{\n" +" \"type\": \"integer\"\n" +" },\n" +" \"brand\":{\n" +" \"type\": \"keyword\",\n" +" \"copy_to\": \"all\"\n" +" },\n" +" \"city\":{\n" +" \"type\": \"keyword\",\n" +" \"copy_to\": \"all\"\n" +" },\n" +" \"starName\":{\n" +" \"type\": \"keyword\"\n" +" },\n" +" \"business\":{\n" +" \"type\": \"keyword\"\n" +" },\n" +" \"location\":{\n" +" \"type\": \"geo_point\"\n" +" },\n" +" \"pic\":{\n" +" \"type\": \"keyword\",\n" +" \"index\": false\n" +" },\n" +" \"all\":{\n" +" \"type\": \"text\",\n" +" \"analyzer\": \"ik_max_word\"\n" +" }\n" +" }\n" +" }\n" +"}"; } //在hotel-demo中的HotelIndexTest測試類中,編寫單元測試,實(shí)現(xiàn)創(chuàng)建索引 @Test void createHotelIndex() throws IOException {// 1.創(chuàng)建Request對象CreateIndexRequest request = new CreateIndexRequest("hotel");// 2.準(zhǔn)備請求的參數(shù):DSL語句request.source(MAPPING_TEMPLATE, XContentType.JSON);// 3.發(fā)送請求client.indices().create(request, RequestOptions.DEFAULT); }

    5.4 刪除索引庫

    • 刪除索引庫的DSL語句非常簡單:DELETE /hotel
    • 與創(chuàng)建索引庫相比:
      • 請求方式從PUT變?yōu)镈ELTE
      • 請求路徑不變
      • 無請求參數(shù)
    • 所以代碼的差異,注意體現(xiàn)在Request對象上。依然是三步走:
    • 創(chuàng)建Request對象。這次是DeleteIndexRequest對象
    • 準(zhǔn)備參數(shù)。這里是無參
    • 發(fā)送請求。改用delete方法
    • 編寫單元測試,實(shí)現(xiàn)刪除索引:@Test void testDeleteHotelIndex() throws IOException {// 1.創(chuàng)建Request對象DeleteIndexRequest request = new DeleteIndexRequest("hotel");// 2.發(fā)送請求client.indices().delete(request, RequestOptions.DEFAULT); }

    5.5 判斷索引庫存在

    • 判斷索引庫是否存在,本質(zhì)就是查詢,對應(yīng)的DSL是:GET /hotel
    • 因此與刪除的Java代碼流程是類似的。依然是三步走:
    • 創(chuàng)建Request對象。這次是GetIndexRequest對象
    • 準(zhǔn)備參數(shù)。這里是無參
    • 發(fā)送請求。改用exists方法
    • @Test void testExistsHotelIndex() throws IOException {// 1.創(chuàng)建Request對象GetIndexRequest request = new GetIndexRequest("hotel");// 2.發(fā)送請求boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);// 3.輸出System.err.println(exists ? "索引庫已經(jīng)存在!" : "索引庫不存在!"); }

    5.6 總結(jié)

    • JavaRestClient操作elasticsearch的流程基本類似。核心是client.indices()方法來獲取索引庫的操作對象。
    • 索引庫操作的基本步驟:
      • 初始化RestHighLevelClient
      • 創(chuàng)建XxxIndexRequest。XXX是Create、Get、Delete
      • 準(zhǔn)備DSL( Create時需要,其它是無參)
      • 發(fā)送請求。調(diào)用RestHighLevelClient#indices().xxx()方法,xxx是create、exists、delete

    六 RestClient操作文檔

    • 為了與索引庫操作分離,需要增加加一個測試類:
      • 初始化RestHighLevelClient
      • 酒店數(shù)據(jù)在數(shù)據(jù)庫,需要利用IHotelService去查詢,所以注入這個接口
      @SpringBootTest public class HotelDocumentTest {@Autowiredprivate IHotelService hotelService;private RestHighLevelClient client;@BeforeEachvoid setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://192.168.150.101:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();} }

    6.1 新增文檔

  • 索引庫實(shí)體類
    • 數(shù)據(jù)庫實(shí)體類->索引庫實(shí)體類
    @Data @NoArgsConstructor public class HotelDoc {private Long id;private String name;private String address;private Integer price;private Integer score;private String brand;private String city;private String starName;private String business;private String location;private String pic;public HotelDoc(Hotel hotel) {this.id = hotel.getId();this.name = hotel.getName();this.address = hotel.getAddress();this.price = hotel.getPrice();this.score = hotel.getScore();this.brand = hotel.getBrand();this.city = hotel.getCity();this.starName = hotel.getStarName();this.business = hotel.getBusiness();this.location = hotel.getLatitude() + ", " + hotel.getLongitude();this.pic = hotel.getPic();} }
    • 導(dǎo)入酒店數(shù)據(jù),基本流程一致,但是需要考慮幾點(diǎn)變化:
      • 酒店數(shù)據(jù)來自于數(shù)據(jù)庫,需要先查詢出來,得到hotel對象
      • hotel對象需要轉(zhuǎn)為HotelDoc對象
      • HotelDoc需要序列化為json格式
    • 因此,代碼整體步驟如下:
    • 根據(jù)id查詢酒店數(shù)據(jù)Hotel
    • 將Hotel封裝為HotelDoc
    • 將HotelDoc序列化為JSON
    • 創(chuàng)建IndexRequest,指定索引庫名和id
    • 準(zhǔn)備請求參數(shù),也就是JSON文檔
    • 發(fā)送請求
    • @Test void testAddDocument() throws IOException {// 1.根據(jù)id查詢酒店數(shù)據(jù)Hotel hotel = hotelService.getById(61083L);// 2.轉(zhuǎn)換為文檔類型HotelDoc hotelDoc = new HotelDoc(hotel);// 3.將HotelDoc轉(zhuǎn)jsonString json = JSON.toJSONString(hotelDoc);// 1.準(zhǔn)備Request對象IndexRequest request = new IndexRequest("hotel").id(hotelDoc.getId().toString());// 2.準(zhǔn)備Json文檔request.source(json, XContentType.JSON);// 3.發(fā)送請求client.index(request, RequestOptions.DEFAULT); }
    • 測試運(yùn)行結(jié)果:

    6.2 查詢文檔

    • 詢的目的是得到結(jié)果,解析為HotelDoc,因此難點(diǎn)是結(jié)果的解析
    • 結(jié)果是一個JSON,其中文檔放在一個_source屬性中,因此解析就是拿到_source,反序列化為Java對象即可
    • 三步走:
    • 準(zhǔn)備Request對象。這次是查詢,所以是GetRequest
    • 發(fā)送請求,得到結(jié)果。因?yàn)槭遣樵?#xff0c;這里調(diào)用client.get()方法
    • 解析結(jié)果,就是對JSON做反序列化
    • 編寫單元測試:@Test void testGetDocumentById() throws IOException {// 1.準(zhǔn)備RequestGetRequest request = new GetRequest("hotel", "61082");// 2.發(fā)送請求,得到響應(yīng)GetResponse response = client.get(request, RequestOptions.DEFAULT);// 3.解析響應(yīng)結(jié)果String json = response.getSourceAsString();HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);System.out.println(hotelDoc); }

    6.3 修改文檔

    • 在RestClient的API中,全量修改與新增的API完全一致,判斷依據(jù)是ID:

      • 如果新增時,ID已經(jīng)存在,則修改
      • 如果新增時,ID不存在,則新增
    • Upsert:如果文檔尚不存在,則可以使用以下upsert方法定義一些內(nèi)容,這些內(nèi)容將作為新文檔插入

      String jsonString = "{\"created\":\"2017-01-01\"}"; request.upsert(jsonString, XContentType.JSON);
    • 全量修改:

      @Testvoid testUpdateDocument() throws IOException {// 1.準(zhǔn)備RequestUpdateRequest request = new UpdateRequest("hotel", "61083");// 2.準(zhǔn)備請求參數(shù)UpdateRequest doc = request.doc("price", "952","starName", "四鉆");request.upsert(doc, XContentType.JSON);// 3.發(fā)送請求client.update(request, RequestOptions.DEFAULT);}


    • 增量修改/*** 增量修改* @throws IOException*/ @Test void testUpdateDocument2() throws IOException {// 1.準(zhǔn)備RequestUpdateRequest request = new UpdateRequest("hotel", "61083");// 2.準(zhǔn)備請求參數(shù)UpdateRequest doc = request.doc("price", "888","starName", "八鉆");// 3.發(fā)送請求client.update(request, RequestOptions.DEFAULT); }

    6.4 刪除文檔

    • 三步走:
    • 準(zhǔn)備Request對象,因?yàn)槭莿h除,這次是DeleteRequest對象。要指定索引庫名和id
    • 準(zhǔn)備參數(shù),無參
    • 發(fā)送請求。因?yàn)槭莿h除,所以是client.delete()方法
    • @Test void testDeleteDocument() throws IOException {// 1.準(zhǔn)備RequestDeleteRequest request = new DeleteRequest("hotel", "61083");// 2.發(fā)送請求client.delete(request, RequestOptions.DEFAULT); }

    6.5 批量導(dǎo)入文檔

    • 需求:利用BulkRequest批量將數(shù)據(jù)庫數(shù)據(jù)導(dǎo)入到索引庫中

    • 步驟如下:

      • 利用mybatis-plus查詢酒店數(shù)據(jù)
      • 將查詢到的酒店數(shù)據(jù)(Hotel)轉(zhuǎn)換為文檔類型數(shù)據(jù)(HotelDoc)
      • 利用JavaRestClient中的BulkRequest批處理,實(shí)現(xiàn)批量新增文檔
    • 批量處理BulkRequest,其本質(zhì)就是將多個普通的CRUD請求組合在一起發(fā)送。

      • 其中提供了一個add方法,用來添加其他請求:
    • 能添加的請求包括:

      • IndexRequest:新增
      • UpdateRequest:修改
      • DeleteRequest:刪除
    • Bulk中添加了多個IndexRequest——批量新增功能

    • 編寫單元測試

      @Test void testBulkRequest() throws IOException {// 批量查詢酒店數(shù)據(jù)List<Hotel> hotels = hotelService.list();// 1.創(chuàng)建RequestBulkRequest request = new BulkRequest();// 2.準(zhǔn)備參數(shù),添加多個新增的Requestfor (Hotel hotel : hotels) {// 2.1.轉(zhuǎn)換為文檔類型HotelDocHotelDoc hotelDoc = new HotelDoc(hotel);// 2.2.創(chuàng)建新增文檔的Request對象request.add(new IndexRequest("hotel").id(hotelDoc.getId().toString()).source(JSON.toJSONString(hotelDoc), XContentType.JSON));}// 3.發(fā)送請求client.bulk(request, RequestOptions.DEFAULT); }
    • 測試運(yùn)行結(jié)果:

    • 查詢數(shù)據(jù)庫的數(shù)據(jù)量
    • 查詢索引庫的文檔數(shù)量

    6.6 小結(jié)

    • 文檔操作的基本步驟:
      • 初始化RestHighLevelClient
      • 創(chuàng)建XxxRequest。XXX:Index、Get、Update、Delete、Bulk
      • 準(zhǔn)備參數(shù)(Index、Update、Bulk時需要)
      • 發(fā)送請求。調(diào)用RestHighLevelClient#.xxx()方法,xxx:index、get、update、delete、bulk
      • 解析結(jié)果(Get時需要)

    總結(jié)

    以上是生活随笔為你收集整理的springCloud学习【4】之elasticsearch(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    黄色片免费电影 | 中文字幕在线有码 | 日韩欧美精选 | 热久久国产 | 麻豆传媒视频在线免费观看 | 亚洲九九九 | 免费日韩一区二区三区 | 中文字幕超清在线免费 | 99精品在线免费在线观看 | 成人久久免费视频 | 日韩欧美电影 | 欧美久久久久久久久久久久久 | 国色天香av| 99久久99久国产黄毛片 | 久久成人在线 | 久久久久欧美精品 | 91专区在线观看 | 国产精品久久一区二区三区, | 国产流白浆高潮在线观看 | 国产又黄又硬又爽 | 日韩黄色影院 | 99国产精品视频免费观看一公开 | 91九色最新 | 在线天堂中文www视软件 | 午夜91在线 | 亚洲干 | 一区二区三区视频在线 | 国产在线不卡一区 | 在线国产片 | 草久中文字幕 | 日韩视频一区二区在线观看 | 中文字幕免费观看全部电影 | 在线亚洲小视频 | 狠狠狠色丁香综合久久天下网 | 日韩在线网址 | 国产一区二区手机在线观看 | 亚洲无吗视频在线 | 日日干天夜夜 | 99在线视频免费观看 | 国产精品久久久久永久免费观看 | 中文字幕免费高清 | 91av在线免费播放 | 蜜臀久久99精品久久久无需会员 | 97国产大学生情侣白嫩酒店 | 久草精品视频在线观看 | 91麻豆免费视频 | 99福利片 | 精品欧美一区二区在线观看 | 久久 国产一区 | 欧美视频18 | 综合婷婷丁香 | 精品国产区在线 | 亚洲国产成人av网 | 国产午夜影院 | 国内精品久久久久久久久 | 国产精品第72页 | 日韩videos高潮hd | 夜添久久精品亚洲国产精品 | 91精品久久久久久 | 色的网站在线观看 | 国产精品丝袜 | 免费看高清毛片 | 欧美精品乱码久久久久久 | 免费一级日韩欧美性大片 | 天天操人人干 | 日韩影视精品 | 精品久久久一区二区 | 亚洲精品美女久久久久 | 黄色精品一区二区 | 成人久久免费 | 久热香蕉视频 | 一区在线免费观看 | 国产精品3区 | 国产在线视频一区二区 | 99精品欧美一区二区三区 | 啪啪小视频网站 | 欧美久久久一区二区三区 | 国产成人精品电影久久久 | 视频 天天草 | 国产丝袜网站 | 久久综合免费 | 特级西西444www大精品视频免费看 | 欧美视频二区 | 欧美一二区在线 | 91看片在线看片 | 天天色婷婷 | 国产96在线观看 | 亚洲91中文字幕无线码三区 | 久久久穴 | 国产五月色婷婷六月丁香视频 | 九九色综合 | 超碰在线97观看 | 久久国产精品色av免费看 | 日本夜夜草视频网站 | 国产高清视频在线播放 | 超碰在线日本 | 精品九九九 | 在线а√天堂中文官网 | 久久人人爽人人爽人人 | 日韩欧美综合在线视频 | 在线之家免费在线观看电影 | 天天草天天草 | 91九色在线观看 | 欧美性视频网站 | 精品自拍网| 狠狠色丁香婷婷 | 久久综合九色 | 午夜av网站 | 麻豆91小视频 | 国产免费久久精品 | 欧美性精品 | 国产原创在线 | 操操操综合 | 成人国产精品久久久久久亚洲 | 狠狠色丁香婷综合久久 | av成人动漫在线观看 | 91| 五月婷婷激情五月 | 亚洲国产人午在线一二区 | 91精品国产九九九久久久亚洲 | 成年人视频免费在线 | 国产高清视频免费在线观看 | 日日天天 | 天天射射天天 | 国产99久久久国产精品免费看 | 成人久久 | 欧美一级性 | 国产高清不卡 | 日韩欧美电影 | 99热都是精品 | 国产热re99久久6国产精品 | 久久国产日韩 | 91黄视频在线观看 | 国产精品porn| 日韩欧美国产精品 | 91原创在线观看 | 日韩精品视频免费在线观看 | 天天干天天拍天天操天天拍 | 国内精品99| 激情中文在线 | 国产黄a三级| avav片 | 毛片美女网站 | 欧美一区二区视频97 | 色悠悠久久综合 | 天天射天天操天天干 | 精品在线观看免费 | 久久精品波多野结衣 | 久久亚洲私人国产精品va | 久久久国产网站 | 美女视频黄的免费的 | 免费日韩一区二区 | 人人射人人爱 | 亚洲精品在线免费 | 日韩午夜电影院 | 国产v视频 | 国产精品综合在线观看 | 国产美女在线精品免费观看 | 精品视频成人 | 69av在线播放 | 波多野结衣最新 | 人人爽人人做 | 日本精品久久 | 久草在线视频免费资源观看 | 欧美日韩中文国产一区发布 | 一区二区三区免费在线观看视频 | 成人av网站在线播放 | 婷婷丁香激情五月 | 韩国三级在线一区 | av片在线观看 | 国产精品99久久久久久久久 | 91社区国产高清 | 超碰97成人| 色网站在线免费 | 久久成人在线 | 亚洲精品美女久久久久网站 | 久久在线精品 | 免费在线观看成人 | 一区二区视频播放 | 久久综合精品国产一区二区三区 | 人人干人人搞 | 免费成人av| 成人久久久久久久久久 | 久久国内精品视频 | 97看片网 | 在线91观看 | 成人一级影视 | 亚洲国产日韩在线 | 久久精品伊人 | 免费在线观看日韩视频 | 久久国产一区 | 天海翼一区二区三区免费 | 国产精品视频999 | 成年人在线观看 | 欧美激情另类 | 精品一区二区6 | 成人一区二区三区在线观看 | 国产精品免费小视频 | 蜜臀av性久久久久av蜜臀三区 | 婷婷丁香在线视频 | 国产精品综合在线 | 天天综合色网 | 色射爱 | 国产精品99精品 | 美女视频久久 | 天天操天天爽天天干 | 日韩三级在线 | 日韩免费电影一区二区三区 | 一区二区三区高清不卡 | 九九涩涩av台湾日本热热 | a视频在线观看 | 在线播放精品一区二区三区 | 亚洲va天堂va欧美ⅴa在线 | 亚洲精品www久久久久久 | 欧美孕妇与黑人孕交 | 久久精品国产一区二区电影 | 国产不卡免费 | 777xxx欧美| 麻豆va一区二区三区久久浪 | 黄色三级在线观看 | 久久久亚洲麻豆日韩精品一区三区 | 久草在线视频网 | 国产偷v国产偷∨精品视频 在线草 | av网站手机在线观看 | 国产成人精品一区一区一区 | 精品国产精品久久 | 欧美日韩裸体免费视频 | 丰满少妇在线观看资源站 | 国产精品视频不卡 | 国产精品青草综合久久久久99 | 中文字幕视频 | 久久久国产精品亚洲一区 | 国产91精品一区二区绿帽 | 成人蜜桃 | 免费在线视频一区二区 | 99爱精品视频| 国产91探花 | 国产精品日韩欧美一区二区 | 国产精品一区二区免费看 | 热久久在线视频 | 国产精品va视频 | 国产一二三四在线视频 | 91麻豆精品国产91久久久久 | 国产视频一区二区在线播放 | 麻豆国产网站入口 | 一区二区精品视频 | 激情久久久久久久久久久久久久久久 | 黄色片毛片 | 色综合久久久 | 中文字幕中文字幕 | av不卡中文| 婷婷九月激情 | 三级在线视频观看 | 色99导航 | 色黄久久久久久 | 中文字幕精品在线 | 欧美日韩一级视频 | 天天操夜夜拍 | 在线影院中文字幕 | 国产精品大片在线观看 | 久久免费一| 亚洲精品综合一区二区 | 久久久久久中文字幕 | 91麻豆看国产在线紧急地址 | 在线av资源 | 综合网天天射 | 国产视频一区在线 | 久久久这里有精品 | 中文字幕黄色网 | 最新在线你懂的 | 久久国产精品久久精品国产演员表 | 中文理论片 | 99re国产视频 | 免费能看的av | 一区二区三区四区五区在线 | 91精品成人 | 日韩欧美观看 | 99久久99久久 | 成年人在线观看视频免费 | 日韩欧美精品一区二区三区经典 | 91污在线观看 | 精品一区二区在线播放 | 麻豆一二三精选视频 | 日韩欧美极品 | 97视频人人澡人人爽 | 国产乱码精品一区二区蜜臀 | 天天综合网在线 | av免费网站观看 | 国内成人精品视频 | 女人魂免费观看 | 日韩欧美精品免费 | 热九九精品 | 久99久在线视频 | 国产精品美女久久久久久久久久久 | 欧美色888 | 久久九九精品 | 亚洲国产一区二区精品专区 | 亚洲美女视频在线 | 成人免费视频网址 | 久久久99国产精品免费 | 在线观av | 久久成人国产精品一区二区 | 91自拍视频在线 | 色99之美女主播在线视频 | 成人一区在线观看 | 91网在线观看 | 在线国产一区二区 | 欧美一级黄色网 | 久久久久国产成人精品亚洲午夜 | 免费精品在线 | 99这里只有精品99 | 中文字幕在线免费看 | 亚洲精品在线观 | 国产色婷婷 | 91精品在线免费观看 | 国产免费精彩视频 | 亚洲爱爱视频 | 一本一道波多野毛片中文在线 | 国产夫妻av在线 | 激情网综合| 久草在线视频免赞 | 国产99久久精品一区二区永久免费 | 国产精品完整版 | 中文字幕在线色 | 免费黄色av. | 黄色免费观看视频 | 97精品国产97久久久久久粉红 | 国产色区 | 亚洲专区中文字幕 | 日韩在线视频播放 | 久草免费在线视频 | 久久久国产电影 | 中文字幕在线观看日本 | 午夜 久久 tv | 日韩高清免费在线 | 婷婷亚洲综合五月天小说 | 亚洲 成人 一区 | 在线中文字幕观看 | 日批网站在线观看 | 97超碰人人澡 | 国产精品久久久久久久久久久久午夜 | 国产精品永久在线观看 | 久久久久久久久免费 | 国产人免费人成免费视频 | 久久久久久久久久久久电影 | 91精品久久久久久粉嫩 | 69精品久久久 | 在线国产一区二区三区 | www.色五月.com | 欧美日韩国产综合网 | 日韩视频二区 | 欧美色图亚洲图片 | 国产中文字幕在线视频 | 日本黄色大片免费看 | 国产精品久久久久久电影 | 韩国av电影网 | 日韩免费在线视频 | 久久久久免费电影 | 天天操天天操天天操天天操天天操天天操 | 狠狠色丁香婷婷综合久小说久 | 六月色 | 91久久人澡人人添人人爽欧美 | 在线国产日本 | 久久国产精品视频观看 | 9久久精品 | 国产精久久久久久久 | 精品免费视频. | 亚洲欧美偷拍另类 | 精品成人久久 | 亚洲做受高潮欧美裸体 | 久在线| 97电影手机版| 三级黄免费看 | 婷婷九九 | 亚洲精品国产第一综合99久久 | 欧美一级片播放 | 国产欧美最新羞羞视频在线观看 | 狠狠干婷婷 | 色av网站 | 天天综合天天做天天综合 | 免费国产一区二区 | 国产综合精品一区二区三区 | 久草爱| 五月天综合 | 日韩理论电影在线 | 亚洲国产精品电影 | 成人影片在线免费观看 | 亚洲激情网站免费观看 | 99久在线精品99re8热视频 | 91色视频 | 国产精品久久久久久久久费观看 | 热99久久精品 | 国产精品毛片一区视频 | 91精品视频免费观看 | 九九视频这里只有精品 | 欧洲一区二区三区精品 | 国产人成看黄久久久久久久久 | 成人久久精品视频 | 九色精品在线 | 六月激情 | 在线视频亚洲 | 日韩精品免费一区二区 | 在线观看视频免费播放 | 伊人激情综合 | 欧美精品999 | 国产精品黑丝在线观看 | 精品久久精品久久 | 国产91精品在线观看 | 91精品国产综合久久久久久久 | 天天综合网久久 | 麻豆91在线| 亚洲理论片 | 国产69久久精品成人看 | 国产日产精品一区二区三区四区的观看方式 | 香蕉网站在线观看 | 51久久成人国产精品麻豆 | 狠狠色丁香婷综合久久 | 亚洲一区二区视频 | 久久99精品国产 | 狠狠色狠狠色合久久伊人 | 亚洲成人999| 中文字幕乱偷在线 | 精品免费在线视频 | 国产综合精品一区二区三区 | 九九在线高清精品视频 | 黄色网址中文字幕 | 最新日韩视频在线观看 | 亚洲女同ⅹxx女同tv | 久久露脸国产精品 | 国产精品18久久久久久久久久久久 | 13日本xxxxxⅹxxx20 | 91尤物国产尤物福利在线播放 | 人人澡人人干 | 四川bbb搡bbb爽爽视频 | 9在线观看免费高清完整版 玖玖爱免费视频 | 91av99| 婷婷久久网站 | 久久久久久草 | 在线观看国产v片 | www久久久| 天天色草| 少妇bbb搡bbbb搡bbbb | 中文字幕亚洲欧美 | 激情六月婷婷久久 | 国产成人精品综合久久久久99 | 国产免费观看高清完整版 | 日韩理论片在线观看 | 91日本在线播放 | 精品一区二区免费在线观看 | 爱情影院aqdy鲁丝片二区 | 国产高清视频在线免费观看 | 色网站在线 | 国产在线黄色 | 天天天在线综合网 | 夜夜视频 | 青草视频在线看 | 亚洲一级久久 | 日韩欧美高清在线观看 | 免费高清在线视频一区· | 久久久久久久久久久久久久电影 | 精品久久久久久国产91 | 中文字幕高清免费日韩视频在线 | 最近中文字幕免费 | 91精品在线免费观看视频 | 欧美在线视频第一页 | 欧美精品资源 | 亚洲国产精品va在线看黑人动漫 | 亚洲精选视频在线 | 亚洲综合网站在线观看 | 婷婷国产一区二区三区 | 久久99精品视频 | 成人国产电影在线观看 | 天天操 夜夜操 | 香蕉视频在线免费 | 九九涩涩av台湾日本热热 | 国产成a人亚洲精v品在线观看 | 三级黄免费看 | 国产一级片在线播放 | 亚洲精品中文字幕在线观看 | 五月视频| 国产91在线播放 | 九九热视频在线 | 国产区在线看 | 永久免费毛片在线观看 | 国产精华国产精品 | 亚洲欧美日韩一级 | 国产在线高清视频 | 日韩精品中字 | 日韩欧美视频免费观看 | 欧美一区二视频在线免费观看 | 日韩高清免费在线观看 | 91精品推荐 | av在线中文| 99精品视频99 | 成人资源站 | 超碰公开97 | 韩国中文三级 | 日本xxxx裸体xxxx17| 国产999精品 | 91探花国产综合在线精品 | 韩国av电影网 | 国产美腿白丝袜足在线av | 国产999精品久久久久久 | 一区二区三区国产欧美 | 97av视频| 香蕉视频最新网址 | 国产v视频| 日日噜噜噜噜夜夜爽亚洲精品 | 黄色影院在线播放 | 日韩av电影中文字幕在线观看 | 深夜激情影院 | 中文字幕免费高清av | bbb搡bbb爽爽爽 | 69精品视频在线观看 | 国产福利久久 | 中文字幕黄色网 | 天天操综合网站 | 国产色婷婷在线 | 中文字幕久久精品一区 | 蜜桃视频在线视频 | 99精品视频在线观看免费 | 中文伊人 | av丝袜制服 | 91超碰在线播放 | 色爱成人网 | 成人免费在线视频 | 日本黄网站 | 色小说在线 | 亚洲乱码在线观看 | 久久超级碰视频 | 91夜夜夜| 天天操夜夜爱 | 亚洲视频在线视频 | 久久精品一区二区三 | 中文字幕成人网 | 在线观看v片 | 久久精品视频2 | 蜜桃av人人夜夜澡人人爽 | 最近日本中文字幕a | 午夜视频在线观看一区二区 | 夜色.com | 国产精品刺激对白麻豆99 | 91精品国产91久久久久久三级 | 国产精品专区一 | 国产黄色网 | 手机看片国产日韩 | 欧美黑吊大战白妞欧美 | 91在线免费视频观看 | 91av手机在线观看 | 国产电影一区二区三区四区 | 天天草天天色 | 国产一级免费播放 | 69国产精品视频免费观看 | 亚洲视频h| 深爱激情五月综合 | 91精品久久久久久综合乱菊 | 综合天天 | 亚洲专区一二三 | 国产精品一区二 | 9在线观看免费高清完整版 玖玖爱免费视频 | 欧美一二三区在线观看 | 91久久精品一区 | 伊人久久国产精品 | 少妇视频一区 | 欧美精品一区二区三区一线天视频 | 97福利社| 久草免费福利在线观看 | a爱爱视频 | 日日夜夜精品免费 | 国产视频观看 | 免费看黄色大全 | 国产精品免费看 | 四虎在线观看网址 | 国产高清免费视频 | 国产精品久久久久999 | 欧美久久九九 | 亚洲亚洲精品在线观看 | 国产精品永久 | 中文字幕日韩av | 国产这里只有精品 | 免费视频91 | 亚洲免费婷婷 | 日韩国产欧美在线视频 | 欧美与欧洲交xxxx免费观看 | 亚洲成a人片在线观看网站口工 | 在线观看免费一级片 | www178ccom视频在线 | 天海翼一区二区三区免费 | 国产一区二区三区视频在线 | 黄色三级在线观看 | 玖玖视频在线 | 国产黄色免费看 | av亚洲产国偷v产偷v自拍小说 | 日日夜夜中文字幕 | 国产乱码精品一区二区蜜臀 | 激情小说网站亚洲综合网 | 午夜精品视频免费在线观看 | 日韩一区视频在线 | 日韩高清无线码2023 | 91在线区 | 国产福利一区二区三区视频 | 欧美91精品国产自产 | 97福利在线观看 | 久久精品国产第一区二区三区 | 91女人18片女毛片60分钟 | 欧美 日韩 视频 | 欧美中文字幕第一页 | 激情视频免费在线 | 日日干激情五月 | 性色在线视频 | bbw av| 在线免费日韩 | 在线亚洲播放 | 成人免费电影 | 中文有码在线视频 | 久久99热这里只有精品 | 81精品国产乱码久久久久久 | 亚洲成a人片在线www | 最新国产中文字幕 | 国产专区在线 | 亚洲日本va午夜在线电影 | 久精品在线 | www.夜夜爽 | 91精品国产91久久久久 | 欧美一级特黄高清视频 | 一区二区伦理 | 日韩国产精品久久久久久亚洲 | 国产网站在线免费观看 | 五月天综合色激情 | 精品久久久亚洲 | 国产亚洲午夜高清国产拍精品 | 成人在线播放视频 | 久草久草视频 | 日韩电影一区二区三区在线观看 | 麻豆视频免费看 | 在线观看国产一区 | 久久成人18免费网站 | 国产精品区二区三区日本 | 午夜国产福利在线 | 日韩在线视频一区 | av中文字幕网址 | 日本超碰在线 | 国内视频一区二区 | 天天色天天操天天爽 | 中文字幕一区二区三区乱码在线 | 国产精品18久久久久久vr | 亚洲精选在线 | 精品人人人 | 国产一级a毛片视频爆浆 | 国产手机在线播放 | 黄色免费网站下载 | 久久爽久久爽久久av东京爽 | 伊人狠狠| 五月婷婷综合在线 | 四虎精品成人免费网站 | 深夜国产福利 | 色综合色综合色综合 | 久久曰视频 | 伊人影院在线观看 | 私人av| 欧美成人aa | 欧美一区二视频在线免费观看 | 91精品国产成 | 婷婷免费视频 | 在线观看av网 | 福利精品在线 | 天天综合网久久 | 日韩黄色免费 | 天天插狠狠插 | 亚洲第一区在线观看 | 免费看一及片 | 日本三级大片 | 亚洲国产午夜视频 | 色狠狠干 | 最新超碰在线 | 久久中文字幕视频 | 国产高清无线码2021 | 亚洲综合激情五月 | 在线电影 一区 | 日韩精品在线观看视频 | 97理论片| 蜜桃av观看 | 91免费在线播放 | 韩国精品在线观看 | 免费在线观看午夜视频 | 国产色a在线观看 | 精品视频在线免费观看 | av在线a | 激情综合五月天 | 久草在线免费看视频 | 亚洲综合少妇 | 亚洲va在线va天堂 | 欧美一区二区三区激情视频 | 二区中文字幕 | 手机av在线网站 | 国产精品区二区三区日本 | 人人草在线视频 | wwxxxx日本 | 国产精品久久久久久久久久 | 国产精久久久久久妇女av | 免费看片网页 | 久久精品这里都是精品 | 全久久久久久久久久久电影 | 五月婷婷激情五月 | 欧美日韩高清在线观看 | 国产裸体视频网站 | 99久久精品无码一区二区毛片 | 国产小视频免费在线网址 | 欧美孕交vivoestv另类 | 国产精品系列在线观看 | 欧美在线视频一区二区三区 | 亚洲精品国产欧美在线观看 | 久草精品免费 | 久久免费视频一区 | 中文字幕人成一区 | 男女激情免费网站 | 在线看黄色的网站 | 伊人久久国产 | 国产男女无遮挡猛进猛出在线观看 | 欧美精品久久人人躁人人爽 | 亚洲a资源| 午夜av不卡 | 久久好看| 欧美久久久久久久久中文字幕 | 久久久久久久网 | 在线观看黄色av | 人人干人人做 | 欧美一级黄色网 | а天堂中文最新一区二区三区 | 久99久在线视频 | 亚洲影视九九影院在线观看 | av免费网站观看 | 国产原创在线 | 国产精品自产拍在线观看桃花 | 91人人插| 欧美在线视频不卡 | 丁香综合五月 | 一级黄色片在线观看 | 成年性视频| 亚一亚二国产专区 | 在线观看中文字幕dvd播放 | av在线一级 | 91精品啪在线观看国产81旧版 | 亚洲日本三级 | 91在线观看黄 | 午夜精品一区二区三区在线视频 | 91福利视频免费 | 91精品办公室少妇高潮对白 | 国产糖心vlog在线观看 | 在线中文日韩 | 一区二区三区四区免费视频 | 国产亚洲aⅴaaaaaa毛片 | 国产精品无av码在线观看 | 国产精品不卡 | 九九久久久久99精品 | 91麻豆精品91久久久久同性 | 国产精品久久久久免费 | 日韩美女免费线视频 | 日本激情中文字幕 | 日日爽天天操 | 欧美日韩精品免费观看 | 狠狠干婷婷 | 激情欧美国产 | 五月激情视频 | 久久久国产一区二区三区 | 网站在线观看日韩 | 久久成人黄色 | 中文字幕 国产视频 | 亚洲国产中文在线观看 | 亚洲国产影院av久久久久 | 久久精品视频在线观看免费 | 久草久视频 | 久久久黄色av | 国产精品美女免费视频 | 久草在线在线精品观看 | 欧美日韩亚洲在线观看 | 99精品久久久久久久 | 国产午夜一区二区 | 久久久久久久久久免费视频 | 中文字幕乱码亚洲精品一区 | 五月激情婷婷丁香 | 国产免费资源 | 在线电影a | www.啪啪.com| 国产精品激情偷乱一区二区∴ | 麻豆久久久| 久久精品国产亚洲aⅴ | 丁香高清视频在线看看 | 欧美性猛片,| 亚洲综合成人专区片 | 91精品综合在线观看 | 久操视频在线免费看 | 国产精品美女久久久久久久久久久 | 国产一区二区免费 | 成人a免费 | 成人毛片一区二区三区 | 网站免费黄 | 99免在线观看免费视频高清 | 欧美一级性视频 | 日韩激情中文字幕 | 亚洲视屏在线播放 | 99色在线视频 | www.一区二区三区 | 国产91成人| 天天曰 | 97精品国产97久久久久久粉红 | 久久久国产精品免费 | 亚洲情影院 | 综合色站导航 | 成人午夜影院在线观看 | 伊人亚洲综合 | 99视频国产精品免费观看 | 色网站在线免费 | 亚洲精品欧美视频 | 亚洲欧洲一区二区在线观看 | 四虎影视成人永久免费观看视频 | 日韩欧美91| 91一区一区三区 | 国产黄色一级片 | 日韩久久精品 | 久久最新网址 | 国产麻豆视频在线观看 | 亚洲精品网页 | 亚洲精品国产精品国自产观看 | 黄色av网站在线免费观看 | 在线观看mv的中文字幕网站 | 开心色激情网 | 日韩欧美在线视频一区二区三区 | 51久久夜色精品国产麻豆 | 中文字幕91视频 | 国产精品久久久久久超碰 | 日韩欧美xxxx | 91亚洲狠狠婷婷综合久久久 | 免费在线观看黄色网 | 一区二区激情视频 | 人人舔人人爱 | 人人涩 | 狠狠操狠狠干2017 | 国产精国产精品 | 日韩电影中文字幕在线 | 97福利在线 | 青青河边草免费直播 | 午夜久久久久久久久 | 久久午夜剧场 | 日韩高清免费电影 | 97超碰人人澡人人爱 | 国产一级免费观看 | 免费观看91| 亚洲黄色激情小说 | av日韩精品 | 在线观看久 | 96精品视频| 日韩亚洲在线视频 | 天天射天天射天天射 | 亚洲综合色站 | 97视频免费观看 | 成人理论电影 | 亚洲视频,欧洲视频 | 日本女人逼 | 五月婷婷影院 | 91九色国产蝌蚪 | 韩日精品在线 | 9草在线| 亚洲精品在线播放视频 | 在线久热 | 最近中文字幕完整视频高清1 | 国产精品久久久久久久久大全 | 99爱这里只有精品 | 免费看v片网站 | 狠狠久久综合 | 久久超碰网 | 精品在线观看一区二区三区 | 超碰97久久| 欧美aa一级片 | 狠狠色丁香婷婷综合欧美 | 777视频在线观看 | 日韩欧美一区二区三区在线观看 | 99视频在线免费看 | 久久久久综合视频 | 久草视频在线播放 | 日韩高清dvd | 91精品专区| 亚洲精品自在在线观看 | 91视频久久| 亚洲精品一区二区在线观看 | 国产精品久久久久久久av大片 | 九九热视频在线播放 | 97人人模人人爽人人喊中文字 | 中文字幕在线播放一区 | 日韩系列在线观看 | 最新中文字幕在线播放 | 日韩专区在线播放 | 久草在线观看视频免费 | 亚洲日韩精品欧美一区二区 | 欧美一级电影免费观看 | 色婷婷www| 亚洲综合激情 | 99久久婷婷国产综合精品 | 99久久精品国产亚洲 | 久久国精品 | 97超碰人人澡 | 狠狠色狠狠色 | 国产中文字幕网 | 三级大片网站 | 日韩视| 超碰在线成人 | 国产成人精品午夜在线播放 | 久久久不卡影院 | 97超碰中文字幕 | 2021国产在线视频 | 中文字幕免费高清 | 四虎国产精品免费观看视频优播 | 99久久精品无免国产免费 | 麻豆免费看片 | 2022国产精品视频 | 在线播放你懂 | 国产无吗一区二区三区在线欢 | 成人在线免费视频观看 | 国产不卡在线观看 | 91丨九色丨国产女 | 国产v在线观看 | 在线成人中文字幕 | 99在线精品视频在线观看 | 久草在线综合网 | 色午夜| 日韩三级中文字幕 | 欧美成人手机版 | 麻豆影视在线免费观看 | 亚洲欧美日韩国产一区二区三区 | 欧美最爽乱淫视频播放 | 国产精品专区在线 | 久久超 | 91刺激视频 | 国产在线播放不卡 | 久久久国产一区二区三区四区小说 | av国产网站 | 一区在线观看 | 久久综合狠狠综合久久综合88 | 久久综合在线 | 成人网页在线免费观看 | 欧美美女视频在线观看 | 绯色av一区 | 精品久久久久久亚洲综合网 | 久久av网| 免费在线播放视频 | 在线免费成人 | 一二三区在线 | www.玖玖玖 | 欧美极品少妇xxxx | 最近日本中文字幕 | 久久天天操 | 国产精品久久久久久久久婷婷 | 91在线视频观看 | 91av综合 | 看片一区二区三区 | 少妇啪啪av入口 | 久久综合成人 | 欧美性生爱| 日日综合网 | 精品国产三级 | 黄网站免费看 | 欧美日韩二三区 | 国产福利a | www.狠狠插.com | 五月天六月丁香 | 天天拍天天操 | 日韩毛片在线免费观看 | 91av资源在线 | 午夜精品一区二区三区免费视频 | 黄色免费观看 | 99久久精品午夜一区二区小说 | 99在线精品免费视频九九视 | 日本精品一区二区在线观看 | 欧美最爽乱淫视频播放 | 免费av视屏 | 99久久99精品 | 91人人揉日日捏人人看 | 97精品国产97久久久久久久久久久久 | 99精品久久精品一区二区 | 91精品国产99久久久久久久 | 91丨九色丨国产在线观看 | 天天操夜夜操 | 国产99一区视频免费 | 96香蕉视频 | 久久夜色电影 | 五月天激情电影 | 天天摸天天弄 | 国产伦精品一区二区三区免费 | 国产精品99久久久久久人免费 | 国产韩国精品一区二区三区 | 99久久精 | 在线观看mv的中文字幕网站 | 夜夜视频资源 | 黄色一级在线视频 | 久久久99精品免费观看乱色 | 中文字幕av在线电影 | 欧美日产一区 | 色婷婷电影|