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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

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

编程问答

Elasticsearch基础教程ES

發(fā)布時(shí)間:2025/3/21 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Elasticsearch基础教程ES 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Elasticsearch基礎(chǔ)教程
? ? 翻譯:潘飛(tinylambda@gmail.com)


基礎(chǔ)概念



? ? Elasticsearch有幾個(gè)核心概念。從一開(kāi)始理解這些概念會(huì)對(duì)整個(gè)學(xué)習(xí)過(guò)程有莫大的幫助。


? ? 接近實(shí)時(shí)(NRT)
? ? ? ? Elasticsearch是一個(gè)接近實(shí)時(shí)的搜索平臺(tái)。這意味著,從索引一個(gè)文檔直到這個(gè)文檔能夠被搜索到有一個(gè)輕微的延遲(通常是1秒)。
? ? ? ?
? ? 集群(cluster)
? ? ? ? 一個(gè)集群就是由一個(gè)或多個(gè)節(jié)點(diǎn)組織在一起,它們共同持有你整個(gè)的數(shù)據(jù),并一起提供索引和搜索功能。一個(gè)集群由一個(gè)唯一的名字標(biāo)識(shí),這個(gè)名字默認(rèn)就是“elasticsearch”。這個(gè)名字是重要的,因?yàn)橐粋€(gè)節(jié)點(diǎn)只能通過(guò)指定某個(gè)集群的名字,來(lái)加入這個(gè)集群。在產(chǎn)品環(huán)境中顯式地設(shè)定這個(gè)名字是一個(gè)好習(xí)慣,但是使用默認(rèn)值來(lái)進(jìn)行測(cè)試/開(kāi)發(fā)也是不錯(cuò)的。
? ? ? ??
? ? 節(jié)點(diǎn)(node)
? ? ? ? 一個(gè)節(jié)點(diǎn)是你集群中的一個(gè)服務(wù)器,作為集群的一部分,它存儲(chǔ)你的數(shù)據(jù),參與集群的索引和搜索功能。和集群類(lèi)似,一個(gè)節(jié)點(diǎn)也是由一個(gè)名字來(lái)標(biāo)識(shí)的,默認(rèn)情況下,這個(gè)名字是一個(gè)隨機(jī)的漫威漫畫(huà)角色的名字,這個(gè)名字會(huì)在啟動(dòng)的時(shí)候賦予節(jié)點(diǎn)。這個(gè)名字對(duì)于管理工作來(lái)說(shuō)挺重要的,因?yàn)樵谶@個(gè)管理過(guò)程中,你會(huì)去確定網(wǎng)絡(luò)中的哪些服務(wù)器對(duì)應(yīng)于Elasticsearch集群中的哪些節(jié)點(diǎn)。
? ? ? ??
? ? ? ? 一個(gè)節(jié)點(diǎn)可以通過(guò)配置集群名稱(chēng)的方式來(lái)加入一個(gè)指定的集群。默認(rèn)情況下,每個(gè)節(jié)點(diǎn)都會(huì)被安排加入到一個(gè)叫做“elasticsearch”的集群中,這意味著,如果你在你的網(wǎng)絡(luò)中啟動(dòng)了若干個(gè)節(jié)點(diǎn),并假定它們能夠相互發(fā)現(xiàn)彼此,它們將會(huì)自動(dòng)地形成并加入到一個(gè)叫做“elasticsearch”的集群中。
? ? ? ??
? ? ? ? 在一個(gè)集群里,只要你想,可以擁有任意多個(gè)節(jié)點(diǎn)。而且,如果當(dāng)前你的網(wǎng)絡(luò)中沒(méi)有運(yùn)行任何Elasticsearch節(jié)點(diǎn),這時(shí)啟動(dòng)一個(gè)節(jié)點(diǎn),會(huì)默認(rèn)創(chuàng)建并加入一個(gè)叫做“elasticsearch”的集群。
? ? ? ??
? ? 索引(index)
? ? ? ??
? ? ? ? 一個(gè)索引就是一個(gè)擁有幾分相似特征的文檔的集合。比如說(shuō),你可以有一個(gè)客戶(hù)數(shù)據(jù)的索引,另一個(gè)產(chǎn)品目錄的索引,還有一個(gè)訂單數(shù)據(jù)的索引。一個(gè)索引由一個(gè)名字來(lái)標(biāo)識(shí)(必須全部是小寫(xiě)字母的),并且當(dāng)我們要對(duì)對(duì)應(yīng)于這個(gè)索引中的文檔進(jìn)行索引、搜索、更新和刪除的時(shí)候,都要使用到這個(gè)名字。
? ? ? ??
? ? ? ? 在一個(gè)集群中,如果你想,可以定義任意多的索引。
? ? ? ??
? ? 類(lèi)型(type)


? ? ? ? 在一個(gè)索引中,你可以定義一種或多種類(lèi)型。一個(gè)類(lèi)型是你的索引的一個(gè)邏輯上的分類(lèi)/分區(qū),其語(yǔ)義完全由你來(lái)定。通常,會(huì)為具有一組共同字段的文檔定義一個(gè)類(lèi)型。比如說(shuō),我們假設(shè)你運(yùn)營(yíng)一個(gè)博客平臺(tái)并且將你所有的數(shù)據(jù)存儲(chǔ)到一個(gè)索引中。在這個(gè)索引中,你可以為用戶(hù)數(shù)據(jù)定義一個(gè)類(lèi)型,為博客數(shù)據(jù)定義另一個(gè)類(lèi)型,當(dāng)然,也可以為評(píng)論數(shù)據(jù)定義另一個(gè)類(lèi)型。
? ? ? ??
? ? 文檔(document)
? ? ? ??
? ? ? ? 一個(gè)文檔是一個(gè)可被索引的基礎(chǔ)信息單元。比如,你可以擁有某一個(gè)客戶(hù)的文檔,某一個(gè)產(chǎn)品的一個(gè)文檔,當(dāng)然,也可以擁有某個(gè)訂單的一個(gè)文檔。文檔以JSON(Javascript Object Notation)格式來(lái)表示,而JSON是一個(gè)到處存在的互聯(lián)網(wǎng)數(shù)據(jù)交互格式。
? ? ? ??
? ? ? ? 在一個(gè)index/type里面,只要你想,你可以存儲(chǔ)任意多的文檔。注意,盡管一個(gè)文檔,物理上存在于一個(gè)索引之中,文檔必須被索引/賦予一個(gè)索引的type。
? ? ? ??
? ? 分片和復(fù)制(shards & replicas)
? ? ? ??
? ? ? ? 一個(gè)索引可以存儲(chǔ)超出單個(gè)結(jié)點(diǎn)硬件限制的大量數(shù)據(jù)。比如,一個(gè)具有10億文檔的索引占據(jù)1TB的磁盤(pán)空間,而任一節(jié)點(diǎn)都沒(méi)有這樣大的磁盤(pán)空間;或者單個(gè)節(jié)點(diǎn)處理搜索請(qǐng)求,響應(yīng)太慢。
? ? ? ??
? ? ? ? 為了解決這個(gè)問(wèn)題,Elasticsearch提供了將索引劃分成多份的能力,這些份就叫做分片。當(dāng)你創(chuàng)建一個(gè)索引的時(shí)候,你可以指定你想要的分片的數(shù)量。每個(gè)分片本身也是一個(gè)功能完善并且獨(dú)立的“索引”,這個(gè)“索引”可以被放置到集群中的任何節(jié)點(diǎn)上。
? ? ? ??
? ? ? ? 分片之所以重要,主要有兩方面的原因:
? ? ? ??
? ? ? ? ? ? - 允許你水平分割/擴(kuò)展你的內(nèi)容容量
? ? ? ? ? ? - 允許你在分片(潛在地,位于多個(gè)節(jié)點(diǎn)上)之上進(jìn)行分布式的、并行的操作,進(jìn)而提高性能/吞吐量
? ? ? ??
? ? ? ? 至于一個(gè)分片怎樣分布,它的文檔怎樣聚合回搜索請(qǐng)求,是完全由Elasticsearch管理的,對(duì)于作為用戶(hù)的你來(lái)說(shuō),這些都是透明的。
? ? ? ??
? ? ? ? 在一個(gè)網(wǎng)絡(luò)/云的環(huán)境里,失敗隨時(shí)都可能發(fā)生,在某個(gè)分片/節(jié)點(diǎn)不知怎么的就處于離線(xiàn)狀態(tài),或者由于任何原因消失了,這種情況下,有一個(gè)故障轉(zhuǎn)移機(jī)制是非常有用并且是強(qiáng)烈推薦的。為此目的,Elasticsearch允許你創(chuàng)建分片的一份或多份拷貝,這些拷貝叫做復(fù)制分片,或者直接叫復(fù)制。
? ? ? ??
? ? ? ? 復(fù)制之所以重要,有兩個(gè)主要原因:
? ? ? ? ? ? - 在分片/節(jié)點(diǎn)失敗的情況下,提供了高可用性。因?yàn)檫@個(gè)原因,注意到復(fù)制分片從不與原/主要(original/primary)分片置于同一節(jié)點(diǎn)上是非常重要的。
? ? ? ? ? ? - 擴(kuò)展你的搜索量/吞吐量,因?yàn)樗阉骺梢栽谒械膹?fù)制上并行運(yùn)行
? ? ? ? ? ??
? ? ? ? 總之,每個(gè)索引可以被分成多個(gè)分片。一個(gè)索引也可以被復(fù)制0次(意思是沒(méi)有復(fù)制)或多次。一旦復(fù)制了,每個(gè)索引就有了主分片(作為復(fù)制源的原來(lái)的分片)和復(fù)制分片(主分片的拷貝)之別。分片和復(fù)制的數(shù)量可以在索引創(chuàng)建的時(shí)候指定。在索引創(chuàng)建之后,你可以在任何時(shí)候動(dòng)態(tài)地改變復(fù)制的數(shù)量,但是你事后不能改變分片的數(shù)量。
? ? ? ??
? ? ? ? 默認(rèn)情況下,Elasticsearch中的每個(gè)索引被分片5個(gè)主分片和1個(gè)復(fù)制,這意味著,如果你的集群中至少有兩個(gè)節(jié)點(diǎn),你的索引將會(huì)有5個(gè)主分片和另外5個(gè)復(fù)制分片(1個(gè)完全拷貝),這樣的話(huà)每個(gè)索引總共就有10個(gè)分片。
? ? ? ??
? ? ? ? 這些問(wèn)題搞清楚之后,我們就要進(jìn)入好玩的部分了...


安裝


? ? Elasticsearch依賴(lài)Java 7。在本文寫(xiě)作的時(shí)候,推薦使用Oracle JDK 1.7.0_55版本。Java的安裝,在各個(gè)平臺(tái)上都有差異,所以我們不想在這里深入太多細(xì)節(jié)。我只想說(shuō),在你安裝Elasticsearch之前,你可以通過(guò)以下命令來(lái)檢查你的Java版本(如果有需要,安裝或者升級(jí)):


? ? ? ? java -version
? ? ? ? echo $JAVA_HOME


? ? 一旦我們將Java安裝完成,我們就可以下載并安裝Elasticsearch了。其二進(jìn)制文件可以從www.elasticsearch.org/download這里下載,你也可以從這里下載以前發(fā)布的版本。對(duì)于每個(gè)版本,你可以在zip、tar、DEB、RPM類(lèi)型的包中選擇下載。簡(jiǎn)單起見(jiàn),我們使用tar包。


? ? 我們像下面一樣下載Elasticsearch 1.1.1 tar包(Windows用戶(hù)應(yīng)該下載zip包):
? ? ? ??
? ? ? ? curl -L -O https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.1.1.tar.gz


? ? 然后,如下將其解壓(Windows下需要unzip響應(yīng)的zip包):


? ? ? ? tar -xzvf elasticsearch-1.1.1.tar.gz
? ? ? ??
? ? 這將在你的當(dāng)前目錄下創(chuàng)建很多文件和目錄。然后,我們進(jìn)入到bin目錄下:
? ? ? ??
? ? ? ? cd elasticsearch-1.1.1/bin


? ? 至此,我們已經(jīng)準(zhǔn)備好開(kāi)啟我們的節(jié)點(diǎn)和單節(jié)點(diǎn)集群(Windows用戶(hù)應(yīng)該運(yùn)行elasticsearch.bat文件):
? ? ? ??
? ? ? ? ./elasticsearch
? ? ? ??
? ? 如果一切順利,你將看到大量的如下信息:


? ? ? ? ./elasticsearch
? ? ? ? [2014-03-13 13:42:17,218][INFO ][node ? ? ? ? ? ] [New Goblin] version[1.1.1], pid[2085], build[5c03844/2014-02-25T15:52:53Z]
? ? ? ? [2014-03-13 13:42:17,219][INFO ][node ? ? ? ? ? ] [New Goblin] initializing ...
? ? ? ? [2014-03-13 13:42:17,223][INFO ][plugins ? ? ? ?] [New Goblin] loaded [], sites []
? ? ? ? [2014-03-13 13:42:19,831][INFO ][node ? ? ? ? ? ] [New Goblin] initialized
? ? ? ? [2014-03-13 13:42:19,832][INFO ][node ? ? ? ? ? ] [New Goblin] starting ...
? ? ? ? [2014-03-13 13:42:19,958][INFO ][transport ? ? ?] [New Goblin] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/192.168.8.112:9300]}
? ? ? ? [2014-03-13 13:42:23,030][INFO ][cluster.service] [New Goblin] new_master [New Goblin][rWMtGj3dQouz2r6ZFL9v4g][mwubuntu1][inet[/192.168.8.112:9300]], reason: zen-disco-join (elected_as_master)
? ? ? ? [2014-03-13 13:42:23,100][INFO ][discovery ? ? ?] [New Goblin] elasticsearch/rWMtGj3dQouz2r6ZFL9v4g
? ? ? ? [2014-03-13 13:42:23,125][INFO ][http ? ? ? ? ? ] [New Goblin] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/192.168.8.112:9200]}
? ? ? ? [2014-03-13 13:42:23,629][INFO ][gateway ? ? ? ?] [New Goblin] recovered [1] indices into cluster_state
? ? ? ? [2014-03-13 13:42:23,630][INFO ][node ? ? ? ? ? ] [New Goblin] started
? ? ? ??
? ? 不去涉及太多細(xì)節(jié),我們可以看到,一叫做“New Goblin”(你會(huì)見(jiàn)到一個(gè)不同的漫威漫畫(huà)角色)的節(jié)點(diǎn)啟動(dòng)并且將自己選做單結(jié)點(diǎn)集群的master。現(xiàn)在不用關(guān)心master是什么東西。這里重要的就是,我們?cè)谝粋€(gè)集群中開(kāi)啟了一個(gè)節(jié)點(diǎn)。


? ? 正如先前提到的,我們可以覆蓋集群或者節(jié)點(diǎn)的名字。我們可以在啟動(dòng)Elasticsearch的時(shí)候通過(guò)命令行來(lái)指定,如下:
? ? ? ??
? ? ? ? ./elasticsearch --cluster.name my_cluster_name --node.name my_node_name
? ? ? ??
? ? 也要注意一下有http標(biāo)記的那一行,它提供了有關(guān)HTTP地址(192.168.8.112)和端口(9200)的信息,通過(guò)這個(gè)地址和端口我們就可以訪(fǎng)問(wèn)我們的節(jié)點(diǎn)了。默認(rèn)情況下,Elasticsearch使用9200來(lái)提供對(duì)其REST API的訪(fǎng)問(wèn)。如果有必要,這個(gè)端口是可以配置的。




探索你的集群


? ? rest接口
? ? ? ??
? ? ? ? 現(xiàn)在我們已經(jīng)有一個(gè)正常運(yùn)行的節(jié)點(diǎn)(和集群)了,下一步就是要去理解怎樣與其通信了。幸運(yùn)的是,Elasticsearch提供了非常全面和強(qiáng)大的REST API,利用這個(gè)REST API你可以同你的集群交互。下面是利用這個(gè)API,可以做的幾件事情:
? ? ? ??
? ? ? ? ? ? - 檢查你的集群、節(jié)點(diǎn)和索引的健康狀態(tài)、和各種統(tǒng)計(jì)信息
? ? ? ? ? ? - 管理你的集群、節(jié)點(diǎn)、索引數(shù)據(jù)和元數(shù)據(jù)
? ? ? ? ? ? - 對(duì)你的索引進(jìn)行CRUD(創(chuàng)建、讀取、更新和刪除)和搜索操作
? ? ? ? ? ? - 執(zhí)行高級(jí)的查詢(xún)操作,像是分頁(yè)、排序、過(guò)濾、腳本編寫(xiě)(scripting)、小平面刻畫(huà)(faceting)、聚合(aggregations)和許多其它操作
? ? ? ? ? ?
? ? ? ? ? ?
? ? 集群健康
? ??
? ? ? ? 讓我們以基本的健康檢查作為開(kāi)始,我們可以利用它來(lái)查看我們集群的狀態(tài)。此過(guò)程中,我們使用curl,當(dāng)然,你也可以使用任何可以創(chuàng)建HTTP/REST調(diào)用的工具。我們假設(shè)我們還在我們啟動(dòng)Elasticsearch的節(jié)點(diǎn)上并打開(kāi)另外一個(gè)shell窗口。
? ? ? ??
? ? ? ? 要檢查集群健康,我們將使用_cat API。需要事先記住的是,我們的節(jié)點(diǎn)HTTP的端口是9200:
? ? ? ??
? ? ? ? ? ? curl 'localhost:9200/_cat/health?v'
? ? ? ??
? ? ? ? 相應(yīng)的響應(yīng)是:
? ? ? ??
? ? ? ? ? ? epoch ? ? ?timestamp cluster ? ? ? status node.total node.data shards pri relo init unassign
? ? ? ? ? ? 1394735289 14:28:09 ?elasticsearch green ? ? ? ? ? 1 ? ? ? ? 1 ? ? ?0 ? 0 ? ?0 ? ?0 ? ? ? ?0
? ? ? ? ? ??
? ? ? ? 可以看到,我們集群的名字是“elasticsearch”,正常運(yùn)行,并且狀態(tài)是綠色。
? ? ? ??
? ? ? ? 當(dāng)我們?cè)儐?wèn)集群狀態(tài)的時(shí)候,我們要么得到綠色、黃色或紅色。綠色代表一切正常(集群功能齊全),黃色意味著所有的數(shù)據(jù)都是可用的,但是某些復(fù)制沒(méi)有被分配(集群功能齊全),紅色則代表因?yàn)槟承┰?#xff0c;某些數(shù)據(jù)不可用。注意,即使是集群狀態(tài)是紅色的,集群仍然是部分可用的(它仍然會(huì)利用可用的分片來(lái)響應(yīng)搜索請(qǐng)求),但是可能你需要盡快修復(fù)它,因?yàn)槟阌衼G失的數(shù)據(jù)。
? ? ? ??
? ? ? ? 也是從上面的響應(yīng)中,我們可以看到,一共有一個(gè)節(jié)點(diǎn),由于里面沒(méi)有數(shù)據(jù),我們有0個(gè)分片。注意,由于我們使用默認(rèn)的集群名字(elasticsearch),并且由于Elasticsearch默認(rèn)使用網(wǎng)絡(luò)多播(multicast)發(fā)現(xiàn)其它節(jié)點(diǎn),如果你在你的網(wǎng)絡(luò)中啟動(dòng)了多個(gè)節(jié)點(diǎn),你就已經(jīng)把她們加入到一個(gè)集群中了。在這種情形下,你可能在上面的響應(yīng)中看到多個(gè)節(jié)點(diǎn)。
? ? ? ??
? ? ? ? 我們也可以獲得節(jié)集群中的節(jié)點(diǎn)列表:
? ? ? ? ? ??
? ? ? ? ? ? curl 'localhost:9200/_cat/nodes?v'
? ? ? ? ? ??
? ? ? ? 對(duì)應(yīng)的響應(yīng)是:
? ? ? ??
? ? ? ? ? ? curl 'localhost:9200/_cat/nodes?v'
? ? ? ? ? ? host ? ? ? ? ip ? ? ? ?heap.percent ram.percent load node.role master name
? ? ? ? ? ? mwubuntu1 ? ?127.0.1.1 ? ? ? ? ? ?8 ? ? ? ? ? 4 0.00 d ? ? ? ? * ? ? ?New Goblin
? ? ? ??
? ? ? ? 這兒,我們可以看到我們叫做“New Goblin”的節(jié)點(diǎn),這個(gè)節(jié)點(diǎn)是我們集群中的唯一節(jié)點(diǎn)。
? ? ? ??
? ? ? ??
? ? 列出所有的索引
? ? ? ? 讓我們看一下我們的索引:
? ? ? ? ? ??
? ? ? ? ? ? curl 'localhost:9200/_cat/indices?v'
? ? ? ? ? ??
? ? ? ? 響應(yīng)是:
? ? ? ? ? ??
? ? ? ? ? ? curl 'localhost:9200/_cat/indices?v'
? ? ? ? ? ? health index pri rep docs.count docs.deleted store.size pri.store.size
? ? ? ? ? ??
? ? ? ? 這個(gè)結(jié)果意味著,在我們的集群中,我們沒(méi)有任何索引。
? ? ? ??
? ? ? ??
? ? 創(chuàng)建一個(gè)索引
? ??
? ? ? ? 現(xiàn)在讓我們創(chuàng)建一個(gè)叫做“customer”的索引,然后再列出所有的索引:
? ? ? ??
? ? ? ? ? ? curl -XPUT 'localhost:9200/customer?pretty'
? ? ? ? ? ? curl 'localhost:9200/_cat/indices?v'
? ? ? ??
? ? ? ? 第一個(gè)命令使用PUT創(chuàng)建了一個(gè)叫做“customer”的索引。我們簡(jiǎn)單地將pretty附加到調(diào)用的尾部,使其以美觀(guān)的形式打印出JSON響應(yīng)(如果有的話(huà))。
? ? ? ? 響應(yīng)如下:
? ? ? ??
? ? ? ? ? ? curl -XPUT 'localhost:9200/customer?pretty'
? ? ? ? ? ? {
? ? ? ? ? ? ? "acknowledged" : true
? ? ? ? ? ? }


? ? ? ? ? ? curl 'localhost:9200/_cat/indices?v'
? ? ? ? ? ? health index ? ?pri rep docs.count docs.deleted store.size pri.store.size
? ? ? ? ? ? yellow customer ? 5 ? 1 ? ? ? ? ?0 ? ? ? ? ? ?0 ? ? ? 495b ? ? ? ? ? 495b
? ? ? ? ? ??
? ? ? ? 第二個(gè)命令的結(jié)果告知我們,我們現(xiàn)在有一個(gè)叫做customer的索引,并且它有5個(gè)主分片和1份復(fù)制(都是默認(rèn)值),其中包含0個(gè)文檔。
? ? ? ??
? ? ? ? 你可能也注意到了這個(gè)customer索引有一個(gè)黃色健康標(biāo)簽。回顧我們之前的討論,黃色意味著某些復(fù)制沒(méi)有(或者還未)被分配。這個(gè)索引之所以這樣,是因?yàn)镋lasticsearch默認(rèn)為這個(gè)索引創(chuàng)建一份復(fù)制。由于現(xiàn)在我們只有一個(gè)節(jié)點(diǎn)在運(yùn)行,那一份復(fù)制就分配不了了(為了高可用),直到當(dāng)另外一個(gè)節(jié)點(diǎn)加入到這個(gè)集群后,才能分配。一旦那份復(fù)制在第二個(gè)節(jié)點(diǎn)上被復(fù)制,這個(gè)節(jié)點(diǎn)的健康狀態(tài)就會(huì)變成綠色。
? ? ? ??


索引并查詢(xún)一個(gè)文檔
? ? 現(xiàn)在讓我們放一些東西到customer索引中。首先要知道的是,為了索引一個(gè)文檔,我們必須告訴Elasticsearch這個(gè)文檔要到這個(gè)索引的哪個(gè)類(lèi)型(type)下。
? ??
? ? 讓我們將一個(gè)簡(jiǎn)單的客戶(hù)文檔索引到customer索引、“external”類(lèi)型中,這個(gè)文檔的ID是1,操作如下:
? ? ? ??
? ? ? ? curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '
? ? ? ? {
? ? ? ? ? "name": "John Doe"
? ? ? ? }'
? ? ? ??
? ? 響應(yīng)如下:
? ??
? ? ? ? curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '
? ? ? ? {
? ? ? ? ? "name": "John Doe"
? ? ? ? }'
? ? ? ? {
? ? ? ? ? "_index" : "customer",
? ? ? ? ? "_type" : "external",
? ? ? ? ? "_id" : "1",
? ? ? ? ? "_version" : 1,
? ? ? ? ? "created" : true
? ? ? ? }
? ? ? ??
? ? 從上面的響應(yīng)中,我們可以看到,一個(gè)新的客戶(hù)文檔在customer索引和external類(lèi)型中被成功創(chuàng)建。文檔也有一個(gè)內(nèi)部id 1, 這個(gè)id是我們?cè)谒饕臅r(shí)候指定的。
? ??
? ? 有一個(gè)關(guān)鍵點(diǎn)需要注意,Elasticsearch在你想將文檔索引到某個(gè)索引的時(shí)候,并不強(qiáng)制要求這個(gè)索引被顯式地創(chuàng)建。在前面這個(gè)例子中,如果customer索引不存在,Elasticsearch將會(huì)自動(dòng)地創(chuàng)建這個(gè)索引。
? ??
? ? 現(xiàn)在,讓我們把剛剛索引的文檔取出來(lái):
? ??
? ? ? ? curl -XGET 'localhost:9200/customer/external/1?pretty'
? ? ? ??
? ? 響應(yīng)如下:
? ??
? ? ? ? curl -XGET 'localhost:9200/customer/external/1?pretty'
? ? ? ? {
? ? ? ? ? "_index" : "customer",
? ? ? ? ? "_type" : "external",
? ? ? ? ? "_id" : "1",
? ? ? ? ? "_version" : 1,
? ? ? ? ? "found" : true, "_source" : { "name": "John Doe" }
? ? ? ? }
? ? ? ??
? ? 除了一個(gè)叫做found的字段來(lái)指明我們找到了一個(gè)ID為1的文檔,和另外一個(gè)字段——_source——返回我們前一步中索引的完整JSON文檔之外,其它的都沒(méi)有什么特別之處。
? ??
? ??
刪除一個(gè)文檔
? ??
? ? 現(xiàn)在讓我們刪除我們剛剛創(chuàng)建的索引,并再次列出所有的索引:
? ??
? ? ? ? curl -XDELETE 'localhost:9200/customer?pretty'
? ? ? ? curl 'localhost:9200/_cat/indices?v'
? ? ? ??
? ? 響應(yīng)如下:
? ??
? ? ? ? curl -XDELETE 'localhost:9200/customer?pretty'
? ? ? ? {
? ? ? ? ? "acknowledged" : true
? ? ? ? }
? ? ? ? curl 'localhost:9200/_cat/indices?v'
? ? ? ? health index pri rep docs.count docs.deleted store.size pri.store.size
? ? ? ??
? ? 這表明我們成功地刪除了這個(gè)索引,現(xiàn)在我們回到了集群中空無(wú)所有的狀態(tài)。
? ??
? ? 在更進(jìn)一步之前,我們?cè)偌?xì)看一下一些我們學(xué)過(guò)的API命令:
? ? ? ??
? ? ? ? curl -XPUT 'localhost:9200/customer'
? ? ? ? curl -XPUT 'localhost:9200/customer/external/1' -d '
? ? ? ? {
? ? ? ? ? "name": "John Doe"
? ? ? ? }'
? ? ? ? curl 'localhost:9200/customer/external/1'
? ? ? ? curl -XDELETE 'localhost:9200/customer'
? ? ? ??
? ? 如果我們仔細(xì)研究以上的命令,我們可以發(fā)現(xiàn)訪(fǎng)問(wèn)Elasticsearch中數(shù)據(jù)的一個(gè)模式。這個(gè)模式可以被總結(jié)為:
? ??
? ? ? ? curl -<REST Verb> <Node>:<Port>/<Index>/<Type><ID>
? ? ? ??
? ? 這個(gè)REST訪(fǎng)問(wèn)模式普遍適用于所有的API命令,如果你能記住它,你就會(huì)為掌握Elasticsearch開(kāi)一個(gè)好頭。
? ??


修改你的數(shù)據(jù)


? ? Elasticsearch提供了近乎實(shí)時(shí)的數(shù)據(jù)操作和搜索功能。默認(rèn)情況下,從你索引/更新/刪除你的數(shù)據(jù)動(dòng)作開(kāi)始到它出現(xiàn)在你的搜索結(jié)果中,大概會(huì)有1秒鐘的延遲。這和其它類(lèi)似SQL的平臺(tái)不同,數(shù)據(jù)在一個(gè)事務(wù)完成之后就會(huì)立即可用。
? ??
? ? 索引/替換文檔
? ? ? ??
? ? ? ? 我們先前看到,怎樣索引一個(gè)文檔。現(xiàn)在我們?cè)俅握{(diào)用那個(gè)命令:
? ? ? ? ? ? curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '
? ? ? ? ? ? {
? ? ? ? ? ? ? "name": "John Doe"
? ? ? ? ? ? }'
? ? ? ? ? ??
? ? ? ? 再次,以上的命令將會(huì)把這個(gè)文檔索引到customer索引、external類(lèi)型中,其ID是1。如果我們對(duì)一個(gè)不同(或相同)的文檔應(yīng)用以上的命令,Elasticsearch將會(huì)用一個(gè)新的文檔來(lái)替換(重新索引)當(dāng)前ID為1的那個(gè)文檔。
? ? ? ??
? ? ? ? ? ? curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '
? ? ? ? ? ? {
? ? ? ? ? ? ? "name": "Jane Doe"
? ? ? ? ? ? }'
? ? ? ? ? ??
? ? ? ? 以上的命令將ID為1的文檔的name字段的值從“John Doe”改成了“Jane Doe”。如果我們使用一個(gè)不同的ID,一個(gè)新的文檔將會(huì)被索引,當(dāng)前已經(jīng)在索引中的文檔不會(huì)受到影響。
? ? ? ??
? ? ? ? ? ? curl -XPUT 'localhost:9200/customer/external/2?pretty' -d '
? ? ? ? ? ? {
? ? ? ? ? ? ? "name": "Jane Doe"
? ? ? ? ? ? }'
? ? ? ? ? ??
? ? ? ? 以上的命令,將會(huì)索引一個(gè)ID為2的新文檔。
? ? ? ??
? ? ? ? 在索引的時(shí)候,ID部分是可選的。如果不指定,Elasticsearch將產(chǎn)生一個(gè)隨機(jī)的ID來(lái)索引這個(gè)文檔。Elasticsearch生成的ID會(huì)作為索引API調(diào)用的一部分被返回。
? ? ? ??
? ? ? ? 以下的例子展示了怎樣在沒(méi)有指定ID的情況下來(lái)索引一個(gè)文檔:
? ? ? ??
? ? ? ? ? ? curl -XPOST 'localhost:9200/customer/external?pretty' -d '
? ? ? ? ? ? {
? ? ? ? ? ? ? "name": "Jane Doe"
? ? ? ? ? ? }'
? ? ? ? ? ??
? ? ? ? 注意,在上面的情形中,由于我們沒(méi)有指定一個(gè)ID,我們使用的是POST而不是PUT。




更新文檔
? ??
? ? 除了可以索引、替換文檔之外,我們也可以更新一個(gè)文檔。但要注意,Elasticsearch底層并不支持原地更新。在我們想要做一次更新的時(shí)候,Elasticsearch先刪除舊文檔,然后在索引一個(gè)更新過(guò)的新文檔。
? ??
? ? 下面的例子展示了怎樣將我們ID為1的文檔的name字段改成“Jane Doe”:
? ??
? ? ? ? curl -XPOST 'localhost:9200/customer/external/1/_update?pretty' -d '
? ? ? ? {
? ? ? ? ? "doc": { "name": "Jane Doe" }
? ? ? ? }'
? ? ? ??
? ? 下面的例子展示了怎樣將我們ID為1的文檔的name字段改成“Jane Doe”的同時(shí),給它加上age字段:
? ??
? ? ? ? curl -XPOST 'localhost:9200/customer/external/1/_update?pretty' -d '
? ? ? ? {
? ? ? ? ? "doc": { "name": "Jane Doe", "age": 20 }
? ? ? ? }'
? ? ? ??
? ? 更新也可以通過(guò)使用簡(jiǎn)單的腳本來(lái)進(jìn)行。這個(gè)例子使用一個(gè)腳本將age加5:
? ??
? ? ? ? curl -XPOST 'localhost:9200/customer/external/1/_update?pretty' -d '
? ? ? ? {
? ? ? ? ? "script" : "ctx._source.age += 5"
? ? ? ? }'
? ? ? ??
? ? 在上面的例子中,ctx._source指向當(dāng)前要被更新的文檔。
? ??
? ? 注意,在寫(xiě)作本文時(shí),更新操作只能一次應(yīng)用在一個(gè)文檔上。將來(lái),Elasticsearch將提供同時(shí)更新符合指定查詢(xún)條件的多個(gè)文檔的功能(類(lèi)似于SQL的UPDATE-WHERE語(yǔ)句)。
? ??


刪除文檔
? ??
? ? 刪除文檔是相當(dāng)直觀(guān)的。以下的例子展示了我們?cè)鯓觿h除ID為2的文檔:
? ??
? ? ? ? curl -XDELETE 'localhost:9200/customer/external/2?pretty'
? ??
? ? 我們也能夠一次刪除符合某個(gè)查詢(xún)條件的多個(gè)文檔。以下的例子展示了如何刪除名字中包含“John”的所有的客戶(hù):
? ??
? ? ? ? curl -XDELETE 'localhost:9200/customer/external/_query?pretty' -d '
? ? ? ? {
? ? ? ? ? "query": { "match": { "name": "John" } }
? ? ? ? }'
? ? ? ??
? ? 注意,以上的URI變成了/_query,以此來(lái)表明這是一個(gè)“查詢(xún)刪除”API,其中刪除查詢(xún)標(biāo)準(zhǔn)放在請(qǐng)求體中,但是我們?nèi)匀皇褂肈ELETE。現(xiàn)在先不要擔(dān)心查詢(xún)語(yǔ)法,我們將會(huì)在本教程后面的部分中涉及。
? ??


批處理:
? ??
? ? 除了能夠?qū)蝹€(gè)的文檔進(jìn)行索引、更新和刪除之外,Elasticsearch也提供了以上操作的批量處理功能,這是通過(guò)使用_bulk API實(shí)現(xiàn)的。這個(gè)功能之所以重要,在于它提供了非常高效的機(jī)制來(lái)盡可能快的完成多個(gè)操作,與此同時(shí)使用盡可能少的網(wǎng)絡(luò)往返。
? ??
? ? 作為一個(gè)快速的例子,以下調(diào)用在一次bulk操作中索引了兩個(gè)文檔(ID 1 - John Doe and ID 2 - Jane Doe):
? ? ? ??
? ? ? ? curl -XPOST 'localhost:9200/customer/external/_bulk?pretty' -d '
? ? ? ? {"index":{"_id":"1"}}
? ? ? ? {"name": "John Doe" }
? ? ? ? {"index":{"_id":"2"}}
? ? ? ? {"name": "Jane Doe" }
? ? ? ? '
? ? ? ??
? ? 以下例子在一個(gè)bulk操作中,首先更新第一個(gè)文檔(ID為1),然后刪除第二個(gè)文檔(ID為2):
? ??
? ? ? ? curl -XPOST 'localhost:9200/customer/external/_bulk?pretty' -d '
? ? ? ? {"update":{"_id":"1"}}
? ? ? ? {"doc": { "name": "John Doe becomes Jane Doe" } }
? ? ? ? {"delete":{"_id":"2"}}
? ? ? ? '
? ? ? ??
? ? 注意上面的delete動(dòng)作,由于刪除動(dòng)作只需要被刪除文檔的ID,所以并沒(méi)有對(duì)應(yīng)的源文檔。
? ??
? ? bulk API按順序執(zhí)行這些動(dòng)作。如果其中一個(gè)動(dòng)作因?yàn)槟承┰蚴×?#xff0c;將會(huì)繼續(xù)處理它后面的動(dòng)作。當(dāng)bulk API返回時(shí),它將提供每個(gè)動(dòng)作的狀態(tài)(按照同樣的順序),所以你能夠看到某個(gè)動(dòng)作成功與否。




探索你的數(shù)據(jù)


? ? 樣本數(shù)據(jù)集
? ? ? ? 現(xiàn)在我們對(duì)于基本的東西已經(jīng)有了一些感覺(jué),現(xiàn)在讓我們嘗試使用一些更加貼近現(xiàn)實(shí)的數(shù)據(jù)集。我已經(jīng)準(zhǔn)備了一些假想的客戶(hù)的銀行賬戶(hù)信息的JSON文檔的樣本。文檔具有以下的模式(schema):
? ? ? ??
? ? ? ? ? ? {
? ? ? ? ? ? ? ? "account_number": 0,
? ? ? ? ? ? ? ? "balance": 16623,
? ? ? ? ? ? ? ? "firstname": "Bradshaw",
? ? ? ? ? ? ? ? "lastname": "Mckenzie",
? ? ? ? ? ? ? ? "age": 29,
? ? ? ? ? ? ? ? "gender": "F",
? ? ? ? ? ? ? ? "address": "244 Columbus Place",
? ? ? ? ? ? ? ? "employer": "Euron",
? ? ? ? ? ? ? ? "email": "bradshawmckenzie@euron.com",
? ? ? ? ? ? ? ? "city": "Hobucken",
? ? ? ? ? ? ? ? "state": "CO"
? ? ? ? ? ? }
? ? ? ? ? ??
? ? ? ? 我是在http://www.json-generator.com/上生成這些數(shù)據(jù)的。
? ? ? ??
? ? 載入樣本數(shù)據(jù)
? ??
? ? ? ? 你可以從https://github.com/bly2k/files/blob/master/accounts.zip?raw=true下載這個(gè)樣本數(shù)據(jù)集。將其解壓到當(dāng)前目錄下,如下,將其加載到我們的集群里:
? ? ? ??
? ? ? ? ? ? curl -XPOST 'localhost:9200/bank/account/_bulk?pretty' --data-binary @accounts.json
? ? ? ? ? ? curl 'localhost:9200/_cat/indices?v'
? ? ? ??
? ? ? ? 響應(yīng)是:
? ? ? ? ? ? curl 'localhost:9200/_cat/indices?v'
? ? ? ? ? ? health index pri rep docs.count docs.deleted store.size pri.store.size
? ? ? ? ? ? yellow bank ? ?5 ? 1 ? ? ? 1000 ? ? ? ? ? ?0 ? ?424.4kb ? ? ? ?424.4kb
? ? ? ? ? ??
? ? ? ? 這意味著我們成功批量索引了1000個(gè)文檔到銀行索引中(account類(lèi)型)。
? ? ? ??
? ??
? ? 搜索API
? ??
? ? ? ? 現(xiàn)在,讓我們以一些簡(jiǎn)單的搜索來(lái)開(kāi)始。有兩種基本的方式來(lái)運(yùn)行搜索:一種是在REST請(qǐng)求的URI中發(fā)送搜索參數(shù),另一種是將搜索參數(shù)發(fā)送到REST請(qǐng)求體中。請(qǐng)求體方法的表達(dá)能力更好,并且你可以使用更加可讀的JSON格式來(lái)定義搜索。我們將嘗試使用一次請(qǐng)求URI作為例子,但是教程的后面部分,我們將僅僅使用請(qǐng)求體方法。
? ? ? ??
? ? ? ? 搜索的REST API可以通過(guò)_search端點(diǎn)來(lái)訪(fǎng)問(wèn)。下面這個(gè)例子返回bank索引中的所有的文檔:
? ? ? ??
? ? ? ? ? ? curl 'localhost:9200/bank/_search?q=*&pretty'
? ? ? ? ? ??
? ? ? ? 我們仔細(xì)研究一下這個(gè)查詢(xún)調(diào)用。我們?cè)赽ank索引中搜索(_search端點(diǎn)),并且q=*參數(shù)指示Elasticsearch去匹配這個(gè)索引中所有的文檔。pretty參數(shù),和以前一樣,僅僅是告訴Elasticsearch返回美觀(guān)的JSON結(jié)果。
? ? ? ??
? ? ? ? 以下是響應(yīng)(部分列出):
? ? ? ? ? ??
? ? ? ? ? ? curl 'localhost:9200/bank/_search?q=*&pretty'
? ? ? ? ? ? {
? ? ? ? ? ? ? "took" : 63,
? ? ? ? ? ? ? "timed_out" : false,
? ? ? ? ? ? ? "_shards" : {
? ? ? ? ? ? ? ? "total" : 5,
? ? ? ? ? ? ? ? "successful" : 5,
? ? ? ? ? ? ? ? "failed" : 0
? ? ? ? ? ? ? },
? ? ? ? ? ? ? "hits" : {
? ? ? ? ? ? ? ? "total" : 1000,
? ? ? ? ? ? ? ? "max_score" : 1.0,
? ? ? ? ? ? ? ? "hits" : [ {
? ? ? ? ? ? ? ? ? "_index" : "bank",
? ? ? ? ? ? ? ? ? "_type" : "account",
? ? ? ? ? ? ? ? ? "_id" : "1",
? ? ? ? ? ? ? ? ? "_score" : 1.0, "_source" : {"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"}
? ? ? ? ? ? ? ? }, {
? ? ? ? ? ? ? ? ? "_index" : "bank",
? ? ? ? ? ? ? ? ? "_type" : "account",
? ? ? ? ? ? ? ? ? "_id" : "6",
? ? ? ? ? ? ? ? ? "_score" : 1.0, "_source" : {"account_number":6,"balance":5686,"firstname":"Hattie","lastname":"Bond","age":36,"gender":"M","address":"671 Bristol Street","employer":"Netagy","email":"hattiebond@netagy.com","city":"Dante","state":"TN"}
? ? ? ? ? ? ? ? }, {
? ? ? ? ? ? ? ? ? "_index" : "bank",
? ? ? ? ? ? ? ? ? "_type" : "account",
? ? ? ? ? ? ? ? ??
? ? ? ? 對(duì)于這個(gè)響應(yīng),我們看到了以下的部分:
? ? ? ? ? - took —— Elasticsearch執(zhí)行這個(gè)搜索的耗時(shí),以毫秒為單位
? ? ? ? ? - timed_out —— 指明這個(gè)搜索是否超時(shí)
? ? ? ? ? - _shards —— 指出多少個(gè)分片被搜索了,同時(shí)也指出了成功/失敗的被搜索的shards的數(shù)量
? ? ? ? ? - hits —— 搜索結(jié)果
? ? ? ? ? - hits.total —— 能夠匹配我們查詢(xún)標(biāo)準(zhǔn)的文檔的總數(shù)目
? ? ? ? ? - hits.hits —— 真正的搜索結(jié)果數(shù)據(jù)(默認(rèn)只顯示前10個(gè)文檔)
? ? ? ? ? - _score和max_score —— 現(xiàn)在先忽略這些字段
? ? ? ? ? ??
? ? ? ? 使用請(qǐng)求體方法的等價(jià)搜索是:
? ? ? ??
? ? ? ? ? ? curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
? ? ? ? ? ? {
? ? ? ? ? ? ? "query": { "match_all": {} }
? ? ? ? ? ? }'
? ? ? ? ? ??
? ? ? ? 這里的不同之處在于,并不是向URI中傳遞q=*,取而代之的是,我們?cè)赺search API的請(qǐng)求體中POST了一個(gè)JSON格式請(qǐng)求體。我們將在下一部分中討論這個(gè)JSON查詢(xún)。
? ? ? ??
? ? ? ? 響應(yīng)是:
? ? ? ? ? ??
? ? ? ? ? ? curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
? ? ? ? ? ? {
? ? ? ? ? ? ? "query": { "match_all": {} }
? ? ? ? ? ? }'
? ? ? ? ? ? {
? ? ? ? ? ? ? "took" : 26,
? ? ? ? ? ? ? "timed_out" : false,
? ? ? ? ? ? ? "_shards" : {
? ? ? ? ? ? ? ? "total" : 5,
? ? ? ? ? ? ? ? "successful" : 5,
? ? ? ? ? ? ? ? "failed" : 0
? ? ? ? ? ? ? },
? ? ? ? ? ? ? "hits" : {
? ? ? ? ? ? ? ? "total" : 1000,
? ? ? ? ? ? ? ? "max_score" : 1.0,
? ? ? ? ? ? ? ? "hits" : [ {
? ? ? ? ? ? ? ? ? "_index" : "bank",
? ? ? ? ? ? ? ? ? "_type" : "account",
? ? ? ? ? ? ? ? ? "_id" : "1",
? ? ? ? ? ? ? ? ? "_score" : 1.0, "_source" : {"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"}
? ? ? ? ? ? ? ? }, {
? ? ? ? ? ? ? ? ? "_index" : "bank",
? ? ? ? ? ? ? ? ? "_type" : "account",
? ? ? ? ? ? ? ? ? "_id" : "6",
? ? ? ? ? ? ? ? ? "_score" : 1.0, "_source" : {"account_number":6,"balance":5686,"firstname":"Hattie","lastname":"Bond","age":36,"gender":"M","address":"671 Bristol Street","employer":"Netagy","email":"hattiebond@netagy.com","city":"Dante","state":"TN"}
? ? ? ? ? ? ? ? }, {
? ? ? ? ? ? ? ? ? "_index" : "bank",
? ? ? ? ? ? ? ? ? "_type" : "account",
? ? ? ? ? ? ? ? ? "_id" : "13",
? ? ? ??
? ? ? ? 有一點(diǎn)需要重點(diǎn)理解一下,一旦你取回了你的搜索結(jié)果,Elasticsearch就完成了使命,它不會(huì)維護(hù)任何服務(wù)器端的資源或者在你的結(jié)果中打開(kāi)游標(biāo)。這是和其它類(lèi)似SQL的平臺(tái)的一個(gè)鮮明的對(duì)比, 在那些平臺(tái)上,你可以在前面先獲取你查詢(xún)結(jié)果的一部分,然后如果你想獲取結(jié)果的剩余部分,你必須繼續(xù)返回服務(wù)端去取,這個(gè)過(guò)程使用一種有狀態(tài)的服務(wù)器端游標(biāo)技術(shù)。
? ? ? ??
介紹查詢(xún)語(yǔ)言


? ? Elasticsearch提供一種JSON風(fēng)格的特定領(lǐng)域語(yǔ)言,利用它你可以執(zhí)行查詢(xún)。這杯稱(chēng)為查詢(xún)DSL。這個(gè)查詢(xún)語(yǔ)言相當(dāng)全面,第一眼看上去可能有些咄咄逼人,但是最好的學(xué)習(xí)方法就是以幾個(gè)基礎(chǔ)的例子來(lái)開(kāi)始。
? ??
? ? 回到我們上一個(gè)例子,我們執(zhí)行了這個(gè)查詢(xún):
? ??
? ? ? ? {
? ? ? ? ? "query": { "match_all": {} }
? ? ? ? }
? ? ? ??
? ? 分解以上的這個(gè)查詢(xún),其中的query部分告訴我查詢(xún)的定義,match_all部分就是我們想要運(yùn)行的查詢(xún)的類(lèi)型。match_all查詢(xún),就是簡(jiǎn)單地查詢(xún)一個(gè)指定索引下的所有的文檔。
? ??
? ? 除了這個(gè)query參數(shù)之外,我們也可以通過(guò)傳遞其它的參數(shù)來(lái)影響搜索結(jié)果。比如,下面做了一次match_all并只返回第一個(gè)文檔:
? ??
? ? ? ? curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
? ? ? ? {
? ? ? ? ? "query": { "match_all": {} },
? ? ? ? ? "size": 1
? ? ? ? }'
? ??
? ? 注意,如果沒(méi)有指定size的值,那么它默認(rèn)就是10。
? ??
? ? 下面的例子,做了一次match_all并且返回第11到第20個(gè)文檔:
? ??
? ? ? ? curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
? ? ? ? {
? ? ? ? ? "query": { "match_all": {} },
? ? ? ? ? "from": 10,
? ? ? ? ? "size": 10
? ? ? ? }'
? ? ? ??
? ? 其中的from參數(shù)(0-based)從哪個(gè)文檔開(kāi)始,size參數(shù)指明從from參數(shù)開(kāi)始,要返回多少個(gè)文檔。這個(gè)特性對(duì)于搜索結(jié)果分頁(yè)來(lái)說(shuō)非常有幫助。注意,如果不指定from的值,它默認(rèn)就是0。
? ??
? ? 下面這個(gè)例子做了一次match_all并且以賬戶(hù)余額降序排序,最后返前十個(gè)文檔:
? ??
? ? ? ? curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
? ? ? ? {
? ? ? ? ? "query": { "match_all": {} },
? ? ? ? ? "sort": { "balance": { "order": "desc" } }
? ? ? ? }'
? ? ? ??
? ? ? ??
執(zhí)行搜索


? ? 現(xiàn)在我們已經(jīng)知道了幾個(gè)基本的參數(shù),讓我們進(jìn)一步發(fā)掘查詢(xún)語(yǔ)言吧。首先我們看一下返回文檔的字段。默認(rèn)情況下,是返回完整的JSON文檔的。這可以通過(guò)source來(lái)引用(搜索hits中的_sourcei字段)。如果我們不想返回完整的源文檔,我們可以指定返回的幾個(gè)字段。
? ??
? ? 下面這個(gè)例子說(shuō)明了怎樣返回兩個(gè)字段account_number和balance(當(dāng)然,這兩個(gè)字段都是指_source中的字段),以下是具體的搜索:
? ??
? ? ? ? curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
? ? ? ? {
? ? ? ? ? "query": { "match_all": {} },
? ? ? ? ? "_source": ["account_number", "balance"]
? ? ? ? }'
? ? ? ??
? ? 注意到上面的例子僅僅是簡(jiǎn)化了_source字段。它仍將會(huì)返回一個(gè)叫做_source的字段,但是僅僅包含account_number和balance來(lái)年改革字段。
? ??
? ? 如果你有SQL背景,上述查詢(xún)?cè)诟拍钌嫌行┫馭QL的SELECT FROM。
? ??
? ? 現(xiàn)在讓我們進(jìn)入到查詢(xún)部分。之前,我們看到了match_all查詢(xún)是怎樣匹配到所有的文檔的。現(xiàn)在我們介紹一種新的查詢(xún),叫做match查詢(xún),這可以看成是一個(gè)簡(jiǎn)單的字段搜索查詢(xún)(比如對(duì)應(yīng)于某個(gè)或某些特定字段的搜索)。
? ??
? ? 下面這個(gè)例子返回賬戶(hù)編號(hào)為20的文檔:
? ??
? ? ? ? curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
? ? ? ? {
? ? ? ? ? "query": { "match": { "account_number": 20 } }
? ? ? ? }'
? ? ? ??
? ? 下面這個(gè)例子返回地址中包含“mill”的所有賬戶(hù):
? ??
? ? ? ? curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
? ? ? ? {
? ? ? ? ? "query": { "match": { "address": "mill" } }
? ? ? ? }'
? ? ? ??
? ? 下面這個(gè)例子返回地址中包含“mill”或者包含“l(fā)ane”的賬戶(hù):
? ??
? ? ? ?curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
? ? ? ? {
? ? ? ? ? "query": { "match": { "address": "mill lane" } }
? ? ? ? }'?
? ? ? ??
? ? 下面這個(gè)例子是match的變體(match_phrase),它會(huì)去匹配短語(yǔ)“mill lane”:
? ??
? ? ? ? curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
? ? ? ? {
? ? ? ? ? "query": { "match_phrase": { "address": "mill lane" } }
? ? ? ? }'
? ? ? ??
? ? 現(xiàn)在,讓我們介紹一下布爾查詢(xún)。布爾查詢(xún)?cè)试S我們利用布爾邏輯將較小的查詢(xún)組合成較大的查詢(xún)。
? ??
? ? 現(xiàn)在這個(gè)例子組合了兩個(gè)match查詢(xún),這個(gè)組合查詢(xún)返回包含“mill”和“l(fā)ane”的所有的賬戶(hù):
? ??
? ? ? ? curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
? ? ? ? {
? ? ? ? ? "query": {
? ? ? ? ? ? "bool": {
? ? ? ? ? ? ? "must": [
? ? ? ? ? ? ? ? { "match": { "address": "mill" } },
? ? ? ? ? ? ? ? { "match": { "address": "lane" } }
? ? ? ? ? ? ? ]
? ? ? ? ? ? }
? ? ? ? ? }
? ? ? ? }'
? ? ? ??
? ? 在上面的例子中,bool must語(yǔ)句指明了,對(duì)于一個(gè)文檔,所有的查詢(xún)都必須為真,這個(gè)文檔才能夠匹配成功。
? ??
? ? 相反的,下面的例子組合了兩個(gè)match查詢(xún),它返回的是地址中包含“mill”或者“l(fā)ane”的所有的賬戶(hù):
? ??
? ? ? ? curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
? ? ? ? {
? ? ? ? ? "query": {
? ? ? ? ? ? "bool": {
? ? ? ? ? ? ? "should": [
? ? ? ? ? ? ? ? { "match": { "address": "mill" } },
? ? ? ? ? ? ? ? { "match": { "address": "lane" } }
? ? ? ? ? ? ? ]
? ? ? ? ? ? }
? ? ? ? ? }
? ? ? ? }'
? ? ? ??
? ? 在上面的例子中,bool should語(yǔ)句指明,對(duì)于一個(gè)文檔,查詢(xún)列表中,只要有一個(gè)查詢(xún)匹配,那么這個(gè)文檔就被看成是匹配的。
? ??
? ? 現(xiàn)在這個(gè)例子組合了兩個(gè)查詢(xún),它返回地址中既不包含“mill”,同時(shí)也不包含“l(fā)ane”的所有的賬戶(hù)信息:
? ??
? ? ? ? curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
? ? ? ? {
? ? ? ? ? "query": {
? ? ? ? ? ? "bool": {
? ? ? ? ? ? ? "must_not": [
? ? ? ? ? ? ? ? { "match": { "address": "mill" } },
? ? ? ? ? ? ? ? { "match": { "address": "lane" } }
? ? ? ? ? ? ? ]
? ? ? ? ? ? }
? ? ? ? ? }
? ? ? ? }'
? ? ? ??
? ? 在上面的例子中, bool must_not語(yǔ)句指明,對(duì)于一個(gè)文檔,查詢(xún)列表中的的所有查詢(xún)都必須都不為真,這個(gè)文檔才被認(rèn)為是匹配的。
? ??
? ? 我們可以在一個(gè)bool查詢(xún)里一起使用must、should、must_not。此外,我們可以將bool查詢(xún)放到這樣的bool語(yǔ)句中來(lái)模擬復(fù)雜的、多等級(jí)的布爾邏輯。
? ??
? ? 下面這個(gè)例子返回40歲以上并且不生活在ID(daho)的人的賬戶(hù):
? ??
? ? ? ? curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
? ? ? ? {
? ? ? ? ? "query": {
? ? ? ? ? ? "bool": {
? ? ? ? ? ? ? "must": [
? ? ? ? ? ? ? ? { "match": { "age": "40" } }
? ? ? ? ? ? ? ],
? ? ? ? ? ? ? "must_not": [
? ? ? ? ? ? ? ? { "match": { "state": "ID" } }
? ? ? ? ? ? ? ]
? ? ? ? ? ? }
? ? ? ? ? }
? ? ? ? }'
? ? ? ??
? ??
執(zhí)行過(guò)濾器
? ??
? ? 在先前的章節(jié)中,我們跳過(guò)了文檔得分的細(xì)節(jié)(搜索結(jié)果中的_score字段)。這個(gè)得分是與我們指定的搜索查詢(xún)匹配程度的一個(gè)相對(duì)度量。得分越高,文檔越相關(guān),得分越低文檔的相關(guān)度越低。
? ??
? ? Elasticsearch中的所有的查詢(xún)都會(huì)觸發(fā)相關(guān)度得分的計(jì)算。對(duì)于那些我們不需要相關(guān)度得分的場(chǎng)景下,Elasticsearch以過(guò)濾器的形式提供了另一種查詢(xún)功能。過(guò)濾器在概念上類(lèi)似于查詢(xún),但是它們有非常快的執(zhí)行速度,這種快的執(zhí)行速度主要有以下兩個(gè)原因
? ??
? ? ? ? - 過(guò)濾器不會(huì)計(jì)算相關(guān)度的得分,所以它們?cè)谟?jì)算上更快一些
? ? ? ? - 過(guò)濾器可以被緩存到內(nèi)存中,這使得在重復(fù)的搜索查詢(xún)上,其要比相應(yīng)的查詢(xún)快出許多。
? ? ? ??
? ? 為了理解過(guò)濾器,我們先來(lái)介紹“被過(guò)濾”的查詢(xún),這使得你可以將一個(gè)查詢(xún)(像是match_all,match,bool等)和一個(gè)過(guò)濾器結(jié)合起來(lái)。作為一個(gè)例子,我們介紹一下范圍過(guò)濾器,它允許我們通過(guò)一個(gè)區(qū)間的值來(lái)過(guò)濾文檔。這通常被用在數(shù)字和日期的過(guò)濾上。
? ??
? ? 這個(gè)例子使用一個(gè)被過(guò)濾的查詢(xún),其返回值是越在20000到30000之間(閉區(qū)間)的賬戶(hù)。換句話(huà)說(shuō),我們想要找到越大于等于20000并且小于等于30000的賬戶(hù)。
? ??
? ? ? ? curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
? ? ? ? {
? ? ? ? ? "query": {
? ? ? ? ? ? "filtered": {
? ? ? ? ? ? ? "query": { "match_all": {} },
? ? ? ? ? ? ? "filter": {
? ? ? ? ? ? ? ? "range": {
? ? ? ? ? ? ? ? ? "balance": {
? ? ? ? ? ? ? ? ? ? "gte": 20000,
? ? ? ? ? ? ? ? ? ? "lte": 30000
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? }
? ? ? ? }'
? ? ? ??
? ? 分解上面的例子,被過(guò)濾的查詢(xún)包含一個(gè)match_all查詢(xún)(查詢(xún)部分)和一個(gè)過(guò)濾器(filter部分)。我們可以在查詢(xún)部分中放入其他查詢(xún),在filter部分放入其它過(guò)濾器。在上面的應(yīng)用場(chǎng)景中,由于所有的在這個(gè)范圍之內(nèi)的文檔都是平等的(或者說(shuō)相關(guān)度都是一樣的),沒(méi)有一個(gè)文檔比另一個(gè)文檔更相關(guān),所以這個(gè)時(shí)候使用范圍過(guò)濾器就非常合適了。
? ??
? ? 通常情況下,要決定是使用過(guò)濾器還是使用查詢(xún),你就需要問(wèn)自己是否需要相關(guān)度得分。如果相關(guān)度是不重要的,使用過(guò)濾器,否則使用查詢(xún)。如果你有SQL背景,查詢(xún)和過(guò)濾器在概念上類(lèi)似于SELECT WHERE語(yǔ)句, although more so for filters than queries。
? ??
? ? 除了match_all, match, bool,filtered和range查詢(xún),還有很多其它類(lèi)型的查uxn/過(guò)濾器,我們這里不會(huì)涉及。由于我們已經(jīng)對(duì)它們的工作原理有了基本的理解,將其應(yīng)用到其它類(lèi)型的查詢(xún)、過(guò)濾器上也不是件難事。
? ??
執(zhí)行聚合


? ? 聚合提供了分組并統(tǒng)計(jì)數(shù)據(jù)的能力。理解聚合的最簡(jiǎn)單的方式是將其粗略地等同為SQL的GROUP BY和SQL聚合函數(shù)。在Elasticsearch中,你可以在一個(gè)響應(yīng)中同時(shí)返回命中的數(shù)據(jù)和聚合結(jié)果。你可以使用簡(jiǎn)單的API同時(shí)運(yùn)行查詢(xún)和多個(gè)聚合,并以一次返回,這避免了來(lái)回的網(wǎng)絡(luò)通信,這是非常強(qiáng)大和高效的。
? ??
? ? 作為開(kāi)始的一個(gè)例子,我們按照state分組,按照州名的計(jì)數(shù)倒序排序:
? ??
? ? ? ? curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
? ? ? ? {
? ? ? ? ? "size": 0,
? ? ? ? ? "aggs": {
? ? ? ? ? ? "group_by_state": {
? ? ? ? ? ? ? "terms": {
? ? ? ? ? ? ? ? "field": "state"
? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? }
? ? ? ? }'


? ? 在SQL中,上面的聚合在概念上類(lèi)似于:
? ? ? ?SELECT COUNT(*) from bank GROUP BY state ORDER BY COUNT(*) DESC
? ?
? ?響應(yīng)(其中一部分)是:
? ?
? ? ? ? "hits" : {
? ? ? ? ? ? "total" : 1000,
? ? ? ? ? ? "max_score" : 0.0,
? ? ? ? ? ? "hits" : [ ]
? ? ? ? ? },
? ? ? ? ? "aggregations" : {
? ? ? ? ? ? "group_by_state" : {
? ? ? ? ? ? ? "buckets" : [ {
? ? ? ? ? ? ? ? "key" : "al",
? ? ? ? ? ? ? ? "doc_count" : 21
? ? ? ? ? ? ? }, {
? ? ? ? ? ? ? ? "key" : "tx",
? ? ? ? ? ? ? ? "doc_count" : 17
? ? ? ? ? ? ? }, {
? ? ? ? ? ? ? ? "key" : "id",
? ? ? ? ? ? ? ? "doc_count" : 15
? ? ? ? ? ? ? }, {
? ? ? ? ? ? ? ? "key" : "ma",
? ? ? ? ? ? ? ? "doc_count" : 15
? ? ? ? ? ? ? }, {
? ? ? ? ? ? ? ? "key" : "md",
? ? ? ? ? ? ? ? "doc_count" : 15
? ? ? ? ? ? ? }, {
? ? ? ? ? ? ? ? "key" : "pa",
? ? ? ? ? ? ? ? "doc_count" : 15
? ? ? ? ? ? ? }, {
? ? ? ? ? ? ? ? "key" : "dc",
? ? ? ? ? ? ? ? "doc_count" : 14
? ? ? ? ? ? ? }, {
? ? ? ? ? ? ? ? "key" : "me",
? ? ? ? ? ? ? ? "doc_count" : 14
? ? ? ? ? ? ? }, {
? ? ? ? ? ? ? ? "key" : "mo",
? ? ? ? ? ? ? ? "doc_count" : 14
? ? ? ? ? ? ? }, {
? ? ? ? ? ? ? ? "key" : "nd",
? ? ? ? ? ? ? ? "doc_count" : 14
? ? ? ? ? ? ? } ]
? ? ? ? ? ? }
? ? ? ? ? }
? ? ? ? }
? ? ? ??
? ? 我們可以看到AL(abama)有21個(gè)賬戶(hù),TX有17個(gè)賬戶(hù),ID(daho)有15個(gè)賬戶(hù),依此類(lèi)推。
? ??
? ? 注意我們將size設(shè)置成0,這樣我們就可以只看到聚合結(jié)果了,而不會(huì)顯示命中的結(jié)果。
? ??
? ? 在先前聚合的基礎(chǔ)上,現(xiàn)在這個(gè)例子計(jì)算了每個(gè)州的賬戶(hù)的平均余額(還是按照賬戶(hù)數(shù)量倒序排序的前10個(gè)州):
? ??
? ? ? ? curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
? ? ? ? {
? ? ? ? ? "size": 0,
? ? ? ? ? "aggs": {
? ? ? ? ? ? "group_by_state": {
? ? ? ? ? ? ? "terms": {
? ? ? ? ? ? ? ? "field": "state"
? ? ? ? ? ? ? },
? ? ? ? ? ? ? "aggs": {
? ? ? ? ? ? ? ? "average_balance": {
? ? ? ? ? ? ? ? ? "avg": {
? ? ? ? ? ? ? ? ? ? "field": "balance"
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? }
? ? ? ? }'
? ? ? ??
? ? 注意,我們把a(bǔ)verage_balance聚合嵌套在了group_by_state聚合之中。這是所有聚合的一個(gè)常用模式。你可以任意的聚合之中嵌套聚合,這樣你就可以從你的數(shù)據(jù)中抽取出想要的概述。
? ??
? ? 基于前面的聚合,現(xiàn)在讓我們按照平均余額進(jìn)行排序:
? ??
? ? ? ? curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
? ? ? ? {
? ? ? ? ? "size": 0,
? ? ? ? ? "aggs": {
? ? ? ? ? ? "group_by_state": {
? ? ? ? ? ? ? "terms": {
? ? ? ? ? ? ? ? "field": "state",
? ? ? ? ? ? ? ? "order": {
? ? ? ? ? ? ? ? ? "average_balance": "desc"
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? },
? ? ? ? ? ? ? "aggs": {
? ? ? ? ? ? ? ? "average_balance": {
? ? ? ? ? ? ? ? ? "avg": {
? ? ? ? ? ? ? ? ? ? "field": "balance"
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? }
? ? ? ? }'
? ? ? ??
? ? 下面的例子顯示了如何使用年齡段(20-29,30-39,40-49)分組,然后在用性別分組,然后為每一個(gè)年齡段的每一個(gè)性別計(jì)算平均賬戶(hù)余額:
? ??
? ? ? ? curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
? ? ? ? {
? ? ? ? ? "size": 0,
? ? ? ? ? "aggs": {
? ? ? ? ? ? "group_by_age": {
? ? ? ? ? ? ? "range": {
? ? ? ? ? ? ? ? "field": "age",
? ? ? ? ? ? ? ? "ranges": [
? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? "from": 20,
? ? ? ? ? ? ? ? ? ? "to": 30
? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? "from": 30,
? ? ? ? ? ? ? ? ? ? "to": 40
? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? "from": 40,
? ? ? ? ? ? ? ? ? ? "to": 50
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ]
? ? ? ? ? ? ? },
? ? ? ? ? ? ? "aggs": {
? ? ? ? ? ? ? ? "group_by_gender": {
? ? ? ? ? ? ? ? ? "terms": {
? ? ? ? ? ? ? ? ? ? "field": "gender"
? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? "aggs": {
? ? ? ? ? ? ? ? ? ? "average_balance": {
? ? ? ? ? ? ? ? ? ? ? "avg": {
? ? ? ? ? ? ? ? ? ? ? ? "field": "balance"
? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? }
? ? ? ? }'
? ? ? ??
? ? 有很多關(guān)于聚合的細(xì)節(jié),我們沒(méi)有涉及。如果你想做更進(jìn)一步的實(shí)驗(yàn),http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations.html是一個(gè)非常好的起點(diǎn)。
? ??
? ??
總結(jié)


? ? Elasticsearch既是一個(gè)簡(jiǎn)單的產(chǎn)品,也是一個(gè)復(fù)雜的產(chǎn)品。我們現(xiàn)在已經(jīng)學(xué)習(xí)到了基礎(chǔ)部分,它的一些原理,以及怎樣用REST API來(lái)做一些工作。我希望這個(gè)教程已經(jīng)使你對(duì)Elasticsearch是什么有了一個(gè)更好的理解,跟重要的是,能夠激發(fā)你繼續(xù)實(shí)驗(yàn)Elasticsearch的其它特性。


from:?http://blog.csdn.net/cnweike/article/details/33736429

總結(jié)

以上是生活随笔為你收集整理的Elasticsearch基础教程ES的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

国产精品久久久久久爽爽爽 | 亚洲在线精品视频 | 欧美人zozo| 色com网| 午夜美女网站 | 在线观看国产麻豆 | 免费久久99精品国产婷婷六月 | www色综合| 久草在线在线视频 | 人人艹人人 | 国产免费成人av | 天天操天天爱天天爽 | 97超碰在线人人 | 免费黄色特级片 | 911精品美国片911久久久 | 欧美综合久久久 | 日日日操 | 亚洲精品久久久久www | 在线看av网址 | 成人作爱视频 | 全久久久久久久久久久电影 | 成人在线免费观看网站 | 中文字幕你懂的 | 激情综合五月网 | 免费精品人在线二线三线 | 91精品在线视频观看 | 久久九九国产视频 | 日韩av成人 | 国产理论一区二区三区 | 91精品办公室少妇高潮对白 | 99久久久成人国产精品 | 天天拍天天草 | 亚洲精品国产区 | 国产成人久久精品一区二区三区 | 久久国产电影院 | 91在线porny国产在线看 | 男女精品久久 | 国产手机在线观看 | 成人av亚洲 | 国产一区久久久 | 国产在线观看黄 | 国产美女精品视频 | 亚洲精品动漫成人3d无尽在线 | 国产69久久 | 国产69精品久久99的直播节目 | 中文字幕一区二区三 | 亚洲人av免费网站 | 亚洲午夜精品一区 | 国产特级毛片aaaaaa高清 | 色大片免费看 | 综合在线观看色 | 国产色视频一区二区三区qq号 | 亚洲精品国久久99热 | 国产精品一区二区果冻传媒 | 欧美日韩一区二区三区不卡 | 欧美激情精品久久久久久 | 国产不卡免费av | 黄色三级av | 亚洲婷久久 | 成人黄色免费在线观看 | 天天草天天草 | 成人欧美亚洲 | 日韩在线免费电影 | 久久久久久久影院 | 国产一级特黄电影 | 伊人伊成久久人综合网小说 | 91av资源网| 日韩成人精品一区二区三区 | 96超碰在线| 亚洲一区视频在线播放 | 夜夜高潮夜夜爽国产伦精品 | 色国产精品 | 激情亚洲综合在线 | 999久久久久久久久 69av视频在线观看 | www.亚洲精品在线 | 国产一区在线免费观看 | 欧美精品在线观看 | 午夜视频在线瓜伦 | 国产亚洲精品久久久久久 | 99热精品在线观看 | 日本h视频在线观看 | 欧美成人aa| 国产色网| 久久av免费观看 | 丁香六月婷婷综合 | 1000部国产精品成人观看 | 成人午夜在线电影 | 国产亚洲精品成人 | 亚洲综合欧美精品电影 | 久99精品 | 丁香影院在线 | 免费看三级| 久久国产精品久久久久 | 亚洲最新av在线 | 四虎4hu永久免费 | 人人干人人艹 | 成年人免费av网站 | 在线 高清 中文字幕 | 久操视频在线免费看 | 国产午夜精品理论片在线 | 亚洲视频电影在线 | 四川妇女搡bbbb搡bbbb搡 | 亚洲精品麻豆 | 午夜美女福利直播 | 嫩草伊人久久精品少妇av | 五月天色网站 | 久草在线资源网 | av中文字幕免费在线观看 | 欧美日本一二三 | 91麻豆国产福利在线观看 | 99精品视频在线观看免费 | 综合婷婷丁香 | 国产精品久久久久久电影 | 久久成人国产精品免费软件 | 一区二区三区韩国免费中文网站 | 成年人在线播放视频 | 草久在线视频 | 玖玖在线免费视频 | 成人精品一区二区三区电影免费 | 国产黄色成人av | 亚洲精品视频观看 | 狠狠狠狠狠狠天天爱 | 久久久国产一区 | 91av视频免费观看 | 在线免费av网 | 久久精品中文字幕一区二区三区 | 免费人成在线观看网站 | 精品一区二区在线免费观看 | 中文字幕在线观看第三页 | 射射射综合网 | 日韩高清观看 | 午夜国产一区二区三区四区 | 日韩中文字幕a | www.久久视频 | 97超级碰碰碰碰久久久久 | 亚洲视频分类 | 亚洲综合视频在线 | 久草国产精品 | 国内揄拍国内精品 | 中文字幕一区二区在线播放 | 精品在线99 | 国产成人精品一区二区三区网站观看 | 成人精品视频 | 国产99免费 | 超碰com| 久草视频在线免费看 | 久久久精品影视 | 热久久视久久精品18亚洲精品 | 在线看毛片网站 | 国产黑丝一区二区三区 | 水蜜桃亚洲一二三四在线 | 蜜桃视频在线观看一区 | 日本黄色免费在线 | 久久精品99国产精品亚洲最刺激 | 成人免费在线播放视频 | 久久精品系列 | 久久99亚洲网美利坚合众国 | 日韩二区三区在线观看 | 乱男乱女www7788 | 日本三级中文字幕在线观看 | 国产日本亚洲 | 99中文字幕 | 91一区二区三区久久久久国产乱 | 久久这里精品视频 | 国产成人久久精品亚洲 | 日韩三级.com | 午夜视频欧美 | 国产午夜激情视频 | 狠狠躁夜夜av | 手机av永久免费 | 国产成人香蕉 | 国产一区二区在线免费观看 | 国产亚洲精品日韩在线tv黄 | 国产三级国产精品国产专区50 | 人人爽人人av | 免费网站观看www在线观看 | 九九色视频 | 天天干天天拍 | 亚洲视频久久久久 | 亚洲精品裸体 | 日韩视频一区二区在线观看 | 日本深夜福利视频 | 人人澡人人添人人爽一区二区 | 狠狠狠干| 国产美腿白丝袜足在线av | 国偷自产中文字幕亚洲手机在线 | 欧美国产日韩中文 | 九九精品视频在线观看 | 91网站免费观看 | 中文字幕在线播放第一页 | 久久99国产精品免费网站 | 国产精品永久在线 | 高清av免费看 | 国产男女免费完整视频 | 免费三及片 | 91成人精品一区在线播放69 | 91成人精品观看 | 国产又粗又猛又黄又爽的视频 | www.色五月.com | 日韩精品久久久免费观看夜色 | 国产精品电影一区 | 天天se天天cao天天干 | 四虎国产视频 | 最新高清无码专区 | 天天操福利视频 | 日韩视频免费观看高清完整版在线 | 色婷婷视频网 | 一区久久久 | 99精品国产免费久久久久久下载 | 国产美女视频免费 | 亚洲精品字幕在线 | 日韩一二区在线 | 国产精彩视频一区 | 亚洲伊人av | 久久系列| 中文字幕在线电影 | 精品视频在线视频 | 人人草在线观看 | 国产精品一区二区av日韩在线 | 国产91精品高清一区二区三区 | 蜜桃视频日韩 | 久久理论影院 | 一区二区精品在线观看 | 欧美一级片免费播放 | 91在线色 | 久久精品中文字幕免费mv | 国模精品一区二区三区 | 日日夜夜操操操操 | 日韩在线观看高清 | 友田真希x88av | www视频在线播放 | 色吊丝在线永久观看最新版本 | 91丨精品丨蝌蚪丨白丝jk | 成年人在线看片 | 美女久久久久久 | 欧美性大战久久久久 | 一区二区三区在线视频111 | 在线观看日本高清mv视频 | 99视频在线精品免费观看2 | 中文字幕丰满人伦在线 | 中文在线免费观看 | 中文字幕在线观看一区二区三区 | 久久99热这里只有精品 | 亚洲综合在线视频 | 国产欧美日韩精品一区二区免费 | 五月天视频网 | 日韩激情视频 | 一区二三国产 | 中文字幕免费高清在线观看 | 成人在线一区二区三区 | 国产无遮挡又黄又爽在线观看 | 免费一级特黄毛大片 | 国产日韩精品一区二区在线观看播放 | 久久污视频 | 免费av网址在线观看 | 国产无限资源在线观看 | 日本aaaa级毛片在线看 | 成av在线| 波多野结衣在线观看视频 | 91传媒在线观看 | 蜜臀久久99精品久久久无需会员 | 国产96在线观看 | 亚洲精品tv | 免费在线观看av网址 | 久久激情影院 | 亚洲日本国产精品 | 超碰av在线播放 | 中文字幕一区二区三区乱码在线 | 视频一区久久 | 四虎成人精品永久免费av | 久久综合狠狠 | 成人在线黄色 | 天天操天天干天天爱 | 超碰人人超碰 | 欧美国产日韩一区 | 色网站中文字幕 | 天天干,天天操,天天射 | 青青河边草免费观看完整版高清 | 亚洲免费不卡 | 亚洲精品福利视频 | 中文在线免费视频 | 伊人久久av | 91在线免费视频观看 | 最近中文字幕第一页 | av中文字幕在线播放 | 欧美黄网站 | 日韩精品一区二区三区在线播放 | 91福利视频久久久久 | 欧美孕妇与黑人孕交 | 日本色小说视频 | 色婷婷综合成人av | 久久亚洲国产精品 | 在线中文字幕播放 | 久久国色夜色精品国产 | 国产免费美女 | 国产麻豆精品在线观看 | 91精品91 | 一区二区三区在线免费观看 | 国产精品18videosex性欧美 | 成年人在线 | 美女视频黄的免费的 | 91亚洲影院 | 美女网站免费福利视频 | www五月| 国产一区视频免费在线观看 | 亚洲婷婷在线视频 | 成人一区电影 | 欧美在线一二区 | 国产高清绿奴videos | 成人毛片a | 久插视频| 欧美一级在线观看视频 | 在线免费中文字幕 | 337p日本大胆噜噜噜噜 | 国产欧美日韩视频 | 日韩av成人在线观看 | 国产成人精品一区二区三区 | 一级免费看视频 | 国产精品淫片 | 日韩精品久久久久久 | 久久这里只有精品视频首页 | 日韩综合一区二区三区 | av大全免费在线观看 | 天天爽夜夜爽人人爽曰av | 国产一区二区三区在线免费观看 | 欧美 日韩 国产 中文字幕 | 国产精品午夜av | 99国产情侣在线播放 | 国产亚洲午夜高清国产拍精品 | 久久久久激情 | 国产精品 999| 国产精品久久久久久久久久新婚 | 国产一级二级三级视频 | 91在线免费公开视频 | 日韩精品一区二区久久 | 天天色欧美| 五月天六月婷婷 | 一区二区三区高清 | 国产亚洲精品久久19p | 999成人国产 | 精品国产乱子伦一区二区 | 久久综合久久综合九色 | 99视频免费 | 99久久这里只有精品 | 亚洲婷婷综合色高清在线 | 九九99| 欧美日本日韩aⅴ在线视频 插插插色综合 | 久草在线最新免费 | 日韩一级成人av | 欧美aaa一级 | 成人久久18免费网站图片 | 亚洲精品午夜视频 | 成人久久国产 | 国产精品一区专区欧美日韩 | 人人爽人人片 | 天天爱天天干天天爽 | 天天射色综合 | 日韩av一区二区在线播放 | 色婷婷视频网 | 精品亚洲成a人在线观看 | 久久久男人的天堂 | 一级理论片在线观看 | 最新国产在线视频 | 高清av中文字幕 | 国产成人在线观看免费 | 一区中文字幕在线观看 | 国产亚洲精品xxoo | 欧美在线观看视频一区二区三区 | 91久久一区二区 | 精品 一区 在线 | 国产精品国产亚洲精品看不卡15 | 日本九九视频 | 亚洲综合在线五月 | 久久视频在线视频 | 福利视频入口 | 五月婷久久 | 国产精品久久影院 | 亚洲午夜av| www天天干| 欧女人精69xxxxxx | 视频在线观看91 | 久久狠狠婷婷 | 免费手机黄色网址 | 亚洲人成精品久久久久 | 国产成人一区二区啪在线观看 | 色婷婷97 | 一二三精品视频 | www在线观看国产 | 在线成人免费电影 | 成人欧美一区二区三区黑人麻豆 | 探花视频在线观看 | 99精品视频免费看 | 狠狠艹夜夜干 | 免费在线看v | 国产在线美女 | 亚洲涩涩涩 | 狠狠操狠狠 | 亚洲欧美婷婷六月色综合 | 日韩欧美国产成人 | av大片网址 | 中文字幕国语官网在线视频 | 夜夜夜夜夜夜操 | 一本一道波多野毛片中文在线 | 六月丁香激情综合 | 日韩成人精品在线观看 | 日本黄色大片免费 | 日韩在线高清免费视频 | 日韩免费一级a毛片在线播放一级 | 亚洲天堂网视频 | 国产一区二区在线播放 | 色综合久久久久久久久五月 | 亚洲精品动漫成人3d无尽在线 | 波多野结衣一区二区三区中文字幕 | 日韩中文幕 | 久久国产电影 | 亚州成人av在线 | 久久国产精品99久久久久久丝袜 | 国内精品久久久久国产 | 毛片随便看 | 97看片 | 久久99久久99精品免观看软件 | 日韩高清在线一区二区三区 | 最近中文字幕视频网 | www.夜夜爱| 一级理论片在线观看 | 免费亚洲电影 | 国产裸体视频网站 | 天天玩天天干天天操 | 成人a大片| 久久精品免视看 | 国产精品毛片一区二区 | 日韩一区二区三区高清在线观看 | 91禁看片 | 国产中文字幕三区 | 免费网站污 | 特级a老妇做爰全过程 | 久久亚洲区 | 色资源中文字幕 | 国产精品美女久久久久久2018 | 亚洲一区二区三区在线看 | 天天干夜夜夜操天 | 最新日韩在线观看视频 | 亚洲精品成人av在线 | 国产精品午夜8888 | av软件在线观看 | 中文字幕在线视频一区二区 | 久久国产高清 | av黄色大片 | 午夜精品成人一区二区三区 | 伊人狠狠色 | 四虎在线免费视频 | 在线一区av | 精品久久久久久久久久久久久久久久 | 人人舔人人干 | 91香蕉国产在线观看软件 | 久久看片网站 | 91九色精品女同系列 | 久久激情婷婷 | 亚洲 欧美 精品 | 久久免费99 | 日本中文乱码卡一卡二新区 | 久久国产综合视频 | 黄色中文字幕 | 精品国产亚洲日本 | 国产五月婷婷 | 国产视频 亚洲精品 | 久久视频一区二区 | 亚洲小视频在线观看 | 日韩高清一二区 | 中文字幕日本在线观看 | 国产日韩精品在线 | 黄网站色欧美视频 | 国产精品原创av片国产免费 | 久久国产午夜精品理论片最新版本 | 麻豆传媒电影在线观看 | 国产18精品乱码免费看 | 黄色特级片 | 人人干人人艹 | 久艹视频在线观看 | 日操操| 久久精品国产成人 | 500部大龄熟乱视频使用方法 | 中国一级特黄毛片大片久久 | 欧美激情视频一区二区三区 | 婷婷激情欧美 | 91高清视频免费 | 97人人人| 夜夜骑首页 | 天天操天天操天天操天天操天天操天天操 | 国产精品 美女 | www.狠狠操| 在线电影中文字幕 | 国产在线观看免 | 91桃色国产在线播放 | 四虎影视国产精品免费久久 | 丁香婷婷色月天 | 日韩电影久久久 | 成人在线视频免费看 | 综合色影院 | 久久精品9 | 午夜精品电影 | 国产精品毛片久久 | 一区二区丝袜 | 国产成人一区二区在线观看 | 五月天,com | 超碰在线观看av | 亚州精品天堂中文字幕 | 亚洲成人精品影院 | 一本到在线 | av丁香| 视频国产一区二区三区 | 91久久国产综合精品女同国语 | 国产福利91精品 | 婷婷5月色| 欧美亚洲国产日韩 | 日本精品一区二区在线观看 | 91麻豆精品国产91久久久更新时间 | 亚洲专区免费观看 | 91精品久久久久久综合乱菊 | 日本黄区免费视频观看 | 就要色综合 | 色在线视频网 | 欧美精品免费一区二区 | 亚洲精品xxx| 欧美激情va永久在线播放 | 九九热精品视频在线播放 | 天天做日日做天天爽视频免费 | 99在线精品免费视频九九视 | 国产成人在线一区 | a黄色大片 | www久久久久| 国产成人av电影 | 欧美小视频在线 | 亚洲视频在线视频 | 欧美精品在线免费 | 精品久久视频 | 日本丰满少妇免费一区 | 五月婷婷深开心 | 一区二区精品在线视频 | 免费网站看v片在线a | av网址在线播放 | 久久久久 | 中文字幕第一页在线播放 | 超碰97人| 黄色国产高清 | 久久在线免费观看 | 色综合久久五月天 | 又色又爽又黄 | 91福利视频久久久久 | 欧美专区日韩专区 | 最新日本中文字幕 | 顶级bbw搡bbbb搡bbbb | 日韩专区视频 | 免费在线观看污网站 | 91人人干| 九九综合九九综合 | 久久夜av| 国产免费观看久久黄 | 99国产精品免费网站 | 黄色成品视频 | 中文字幕久久亚洲 | 99精品视频免费在线观看 | 国产精品久久综合 | 久久精品中文字幕少妇 | 国产精品自产拍在线观看网站 | 黄色a三级| 国产裸体bbb视频 | 成人免费中文字幕 | 亚洲精品久久久久中文字幕二区 | 在线观看韩日电影免费 | 久久久www成人免费精品张筱雨 | 四虎成人免费观看 | 国产精品国产三级国产 | 国产成人av一区二区三区在线观看 | 色婷婷av一区 | 国产精品美女在线观看 | 欧美日韩xxxxx | 国产伦理一区二区 | 欧美日韩1区2区 | 久久免费视频这里只有精品 | 岛国片在线| 国产999精品久久久久久绿帽 | 国产精品麻豆果冻传媒在线播放 | 欧美日韩国产一区二区三区 | 综合久久影院 | 91久久精品一区二区二区 | 国产精品久久久久婷婷二区次 | 91麻豆精品国产91久久久使用方法 | 日韩视频免费观看高清 | 九月婷婷综合网 | 久草在线视频国产 | 国产黄色片网站 | 黄色成人毛片 | 天天色草| 国产成人333kkk | 国产黄色av| 精品国产伦一区二区三区观看说明 | 精品亚洲欧美一区 | 成人免费看片98欧美 | 国产1区2区3区精品美女 | 国产精品久久久久久久久免费 | 青草视频在线免费 | 久久久久久久久久免费 | 天天干天天搞天天射 | 韩国av电影网 | 2018精品视频 | 天天草天天摸 | 国产精品18久久久久久久久久久久 | 国产美女精品久久久 | 一级黄色片毛片 | 日韩精品一区二区三区免费视频观看 | 亚洲黄在线观看 | 亚洲最新av在线网站 | 人人爱爱人人 | 亚洲小视频在线观看 | 久久久久免费电影 | 久草在线高清 | 五月婷婷六月丁香激情 | 成人手机在线视频 | 久草视频手机在线 | 国产亚洲精品bv在线观看 | 久久精品国产精品亚洲 | 亚欧洲精品视频在线观看 | 特级aaa毛片| 色五婷婷 | 国产精品99久久久久人中文网介绍 | 欧美日韩破处 | 国产原创在线视频 | 国产午夜精品理论片在线 | 国产精久久久 | 一区二区三区四区在线免费观看 | 偷拍区另类综合在线 | 一区二区三区 中文字幕 | 中文视频在线看 | 97国产精品免费 | 国产精品原创av片国产免费 | 天天草天天色 | 中文字幕在线一区二区三区 | 狠狠色噜噜狠狠狠狠2022 | 97国产大学生情侣酒店的特点 | 精品一二三四在线 | 精品综合久久 | 在线观看成人av | 丝袜制服综合网 | 国产一线二线三线性视频 | 在线观看一区二区视频 | 99在线国产| 手机看国产毛片 | 天天色天天射天天综合网 | 国产精品久久久久高潮 | www日韩在线 | 亚洲精品资源在线观看 | 最新av免费在线观看 | 精品久久久999 | 韩国精品在线 | 亚洲乱码精品 | 久人人 | 九九视频免费在线观看 | 国产九色91| 91在线视频免费播放 | 香蕉视频在线免费 | 成片免费观看视频 | 国产精品视频在线观看 | 欧美伦理一区 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 中文字幕在线观看第一区 | 亚洲精品xxx| 激情小说 五月 | 97视频在线播放 | 91久久国产精品 | 黄色影院在线观看 | 夜夜操网 | 日韩一区二区三区高清免费看看 | 91香蕉视频黄色 | 婷婷激情在线 | 五月天久久综合 | 国产精品毛片一区二区在线看 | 成人夜晚看av | 亚洲成年人在线播放 | 亚洲三级黄 | 久久艹久久| 91成人看片 | 日韩激情网 | 亚洲影院一区 | 在线欧美国产 | 日韩国产欧美在线视频 | 激情久久伊人 | 日韩在线字幕 | 国产日韩中文字幕在线 | 麻豆免费视频观看 | 精品国产乱码久久久久久1区2匹 | 一级黄色大片在线观看 | 国产高清免费视频 | 黄色www免费| 欧美热久久 | 国产在线观看你懂的 | bayu135国产精品视频 | www.久久久久 | 国产精品成人免费 | 亚洲精品影院在线观看 | 国产专区视频在线观看 | 尤物97国产精品久久精品国产 | 国产一级电影在线 | 亚洲香蕉在线观看 | 亚洲精品xx | 国产免费久久久久 | 精品1区2区3区 | www看片网站 | 麻豆国产在线播放 | 天天草av| 国产成人精品一区二区三区福利 | 夜夜躁日日躁狠狠久久av | 狠狠狠色丁香婷婷综合久久五月 | 日韩成人免费在线 | 97人人添人澡人人爽超碰动图 | 婷婷看片| av韩国在线 | 亚洲精品视频在 | 日韩黄色免费在线观看 | 91大神精品视频在线观看 | av丝袜在线| 又色又爽又黄高潮的免费视频 | 国产精品视频久久久 | 国产精品久久久久久久久久不蜜月 | 免费成人黄色片 | 国产综合精品一区二区三区 | 亚洲国内精品在线 | 2024av| 色久av| 日日狠狠| 国产黄色av | 麻豆一区二区三区视频 | 国产精品视频线看 | 天天爱天天操天天爽 | 在线精品视频在线观看高清 | 精品国产精品国产偷麻豆 | 激情久久久 | 国产亚洲aⅴaaaaaa毛片 | 婷婷六月综合亚洲 | 久久精品精品 | 欧美日韩性视频在线 | 东方av在 | 日本精品一区二区 | 97色在线观看免费视频 | 天堂激情网 | 久草香蕉在线视频 | 国产女v资源在线观看 | 午夜精品久久一牛影视 | 中文字幕一区二区三区四区在线视频 | 一区二区亚洲精品 | 欧美精品少妇xxxxx喷水 | 波多野结衣动态图 | av在线在线 | 麻豆一二 | 91麻豆精品国产91久久久使用方法 | 在线观看深夜视频 | 99999精品 | 欧美精彩视频在线观看 | 色婷婷骚婷婷 | 在线一区二区三区 | 91av福利视频 | 日韩一二三在线 | 91大神在线看 | 国产高清视频免费最新在线 | 久久久久久国产一区二区三区 | 亚洲精品理论片 | 成 人 黄 色 视频免费播放 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 国产高清视频免费在线观看 | 久久黄色小说 | 97超碰人人 | 99在线视频观看 | 久久久精品网站 | 国产精品男女 | 久久视频精品在线 | 欧美日韩精品在线免费观看 | 三级av免费 | 亚洲精品国产综合99久久夜夜嗨 | 亚州av免费 | 一本色道久久精品 | 另类五月激情 | 高清视频一区二区三区 | 天天草天天干天天 | 国内揄拍国内精品 | 国产一级片免费播放 | 欧美精品久久久久久久 | 奇米先锋| 成人在线视频免费看 | 婷婷色网址 | 粉嫩aⅴ一区二区三区 | 国产精品一区二区三区免费视频 | 久久免费福利 | 久久激情五月激情 | 亚洲三级在线免费观看 | 久久成年视频 | www.狠狠| 国产精品久久久久久五月尺 | 超碰97在线看 | 激情综合网天天干 | 亚洲成人精品国产 | 成年人免费看片网站 | 极品久久久久久久 | 国产亚洲精品久久久久久电影 | 天天爱天天草 | 91精品久久久久久久久久久久久 | 欧美色道| 国产成人av一区二区三区在线观看 | 欧美色综合天天久久综合精品 | 免费看久久久 | 天天插天天操天天干 | 日韩精品免费在线 | 亚洲成年人在线播放 | av在线免费在线观看 | 国产一级在线观看视频 | 91传媒在线观看 | 黄色免费电影网站 | 国产在线播放不卡 | 欧美福利精品 | 免费碰碰 | 亚洲人视频在线 | 99久久综合国产精品二区 | 久久精品3 | av在线电影播放 | 日韩精品一区二区三区水蜜桃 | 99久久精品国产一区二区三区 | 日韩高清一区 | av三级在线播放 | 黄色网址a | 97在线观看| 婷婷色在线播放 | 国产.精品.日韩.另类.中文.在线.播放 | 狠狠干激情 | 99久久久| 亚洲综合欧美日韩狠狠色 | 国产精品在线看 | 日韩一区二区免费在线观看 | 精品视频在线免费观看 | 99riav1国产精品视频 | 狠狠躁夜夜躁人人爽视频 | 国内外成人在线 | 缴情综合网五月天 | 特级毛片在线免费观看 | 久久久亚洲精品 | 婷婷色九月 | 在线日本看片免费人成视久网 | 91福利视频在线 | 国产精品亚 | 麻豆视频免费版 | 国产精品6999成人免费视频 | 日韩在线观看影院 | 91精品国自产在线 | 久久久久久蜜av免费网站 | 久草9视频 | 日韩午夜网站 | 国产手机在线播放 | 丁香花在线视频观看免费 | 操操操天天操 | 亚洲免费激情 | 手机av电影在线观看 | 国产成人精品综合久久久久99 | 性色av免费观看 | 国产中出在线观看 | 亚洲美女精品区人人人人 | 精品国模一区二区 | 麻豆国产精品视频 | 成人免费视频在线观看 | 日韩理论在线播放 | 少妇高潮冒白浆 | 天堂成人在线 | 在线观看久久久久久 | 国产日韩欧美在线观看 | 精品人人人 | 色 免费观看 | 高清久久久 | 亚洲久草在线 | 婷婷久久国产 | 中文字幕免费一区二区 | 四虎8848免费高清在线观看 | 久久一区国产 | 97超碰人 | 精品在线观看一区二区 | 亚洲免费永久精品国产 | 国产精品久久久久久久妇 | 国产一区成人 | 男女精品久久 | 精品国产91亚洲一区二区三区www | 欧美一级视频一区 | 日本成址在线观看 | 涩涩网站在线看 | 超碰在线公开免费 | 不卡中文字幕在线 | 久久久久国产a免费观看rela | 国产成人一区二区在线观看 | 久久99国产精品久久99 | 免费在线观看av片 | 91免费的视频在线播放 | 欧美日韩视频在线观看一区二区 | 9797在线看片亚洲精品 | 亚洲免费精品视频 | 爱爱一区| 精品一区二区在线播放 | 天天射天 | 狠狠干成人综合网 | 午夜影院先 | 国产精品久久艹 | 久久无码av一区二区三区电影网 | 日韩高清精品免费观看 | 激情五月播播久久久精品 | 九九亚洲精品 | 欧美极度另类性三渗透 | 成年美女黄网站色大片免费看 | 美女视频永久黄网站免费观看国产 | 亚洲激情六月 | 波多野结衣综合网 | 在线黄色av电影 | 在线黄av | 色网免费观看 | 天天操天天干天天 | 在线视频麻豆 | 国产精品字幕 | 九九色网 | 免费又黄又爽视频 | 成人97视频一区二区 | 黄色成人av | 欧美999| 精品在线二区 | 精品一区免费 | 欧美久久久一区二区三区 | 久久国产色 | 日韩视频二区 | 国产视频久久久久 | www色网站| 国产又粗又猛又黄视频 | 91传媒在线看 | 中文字幕在线播放第一页 | 亚洲精品乱码久久久久久蜜桃91 | 欧美贵妇性狂欢 | 久久久久免费精品视频 | 五月婷婷丁香六月 | 国产成人精品av在线观 | 91精品免费在线观看 | 日本三级久久 | 日本久久久影视 | 中文字幕精 | 久久人人爽人人爽人人片 | 亚洲最大成人免费网站 | 999抗病毒口服液 | 婷婷中文在线 | 亚洲视频在线观看免费 | 免费av在线网站 | 国产精品嫩草影院99网站 | 国产精品久久二区 | 精品一区二区在线免费观看 | 韩日精品中文字幕 | 中文字幕九九 | 日韩中文幕 | 欧美日韩中文在线观看 | 国产又粗又猛又黄又爽视频 | 色婷婷综合久久久中文字幕 | 亚洲第一色 | 精品久久久久免费极品大片 | 亚洲日本va在线观看 | 色久av| 国产精品色婷婷视频 | 91视频大全 | 亚洲三区在线 | 精品91久久久久 | 激情www| 久草在线视频免赞 | 在线观看 国产 | 日韩成人中文字幕 | 色综合天天色综合 | 91成人免费在线视频 | 亚洲精品日韩一区二区电影 | 国产99免费 | 最近高清中文字幕在线国语5 | 日本黄色免费网站 | 国产精品一区二区你懂的 | 国产香蕉久久精品综合网 | 在线精品国产 | 激情综合电影网 | 久久久久福利视频 | 丁香五婷 | 天天天综合网 | 久久久久久国产精品久久 | 国产一级大片免费看 | 国产黄大片在线观看 | 亚洲午夜久久久综合37日本 | 国产福利在线免费 | 中文字幕在线影院 | 国产精品久久久久一区二区三区 | 亚洲电影免费 | 国产一区精品在线观看 | 99久久久久久国产精品 | 亚洲国产精品va在线 | 日韩电影在线观看一区二区三区 | 成人av资源网 | 亚洲老妇xxxxxx|