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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Elasticsearch入门教程(五):Elasticsearch查询(一)

發布時間:2023/12/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Elasticsearch入门教程(五):Elasticsearch查询(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// 準備數據 PUT /shop/goods/1 {"name": "2017新款女裝冬季外套ulzzang棉襖中長款棉衣韓版百搭棉服面包服","desc": "","price": 268,"quantity": 9267,"colors": ["綠色","黑色"],"is_discount": true,"create_date": "2018-01-31 12:10:30","ip_addr": "192.168.10.1","location": "39.92733,116.39507","merchant": {"id": 999,"shop_name": "阿依莉旗艦店"},"params": [{"id": 1,"label": "型號","value": "A30566"},{"id": 2,"label": "品牌","value": "阿依莉"}],"activity": "買一送一" }PUT /shop/goods/2 {"name": "2018春季長袖t恤女加絨加厚圓領寬松套頭毛衣女裝韓版學生毛線衣","price": 108,"quantity": 268,"colors": ["白藍紅","紅白黑"],"is_discount": false,"create_date": "2017-01-31 12:10:30","ip_addr": "192.168.10.1","location": "39.92733,116.39507","merchant": {"id": 6666,"shop_name": "美特斯邦威旗艦店"},"params": [{"id": 1,"label": "型號","value": "HWT8030"},{"id": 2,"label": "品牌","value": "美特斯邦威"}] }PUT /account/users/1 {"username": "xiaoming","nickname": "小明的老師","age": 6,"height": 1.68,"birthday": "2017-01-31","hobbies": ["吃", "喝", "嫖", "賭"] }PUT /accounts/users/1 {"username": "teacher","nickname": "誰能求姐","age": 6,"height": 1.68,"birthday": "2017-01-31","hobbies": ["批評小明"] }

注意:_search即支持GET也支持POST

GET /_search // 空查詢:查詢所有索引下的所有文檔 GET /{index}/_search // 查詢某個索引下的前10條文檔 GET /{index}/{type}/_search // 查詢某個索引下某個類型的前10條文檔

// 返回結果
took字段表示該操作的耗時(單位為毫秒),
timed_out字段表示是否超時,
_shards:在查詢中參與分片的總數,以及這些分片成功了多少個失敗了多少個
total:返回記錄數,本例是2條。
max_score:最高的匹配程度,本例是1.0。
hits:返回的記錄組成的數組。
返回的記錄中,每條記錄都有一個_score字段,表示匹配的程序,默認是按照這個字段降序排列。

多索引,多類型 GET /{index1},{index2}/_search // 查詢多個索引下的文檔 GET /{index*}/_search // 索引支持*號通配符 GET /{index*},{index*}/_search GET /_all/_search // 和GET /_search效果一樣,_all:表示所有索引GET /{index}/{type1},{type2}/_search // 示例 GET /_search GET /shop/_search GET /shop/goods/_search POST /shop/goods/_search GET /shop,account/_search GET /account*/_search GET /account*,sho*/_search GET /_all/_search GET /shop/goods,products/_search

查詢字符串

查詢字符串:就是在_search上使用GET參數的形式對search進行查詢過濾,即將參數追加到路徑上,此種方式有局限性,不夠靈活

  • q: 通過加號+來指定查詢中的某個字段必須包含某個值,默認是加號,通過減號-來指定文檔中不能包含某個值,使用冒號將字段和值分隔,如 q=last_name:Smith,類似于關系型數據庫中的where中的 like和not like 操作,
  • _source:用于指定要查詢的字段,默認會返回文檔中的所有字段,多個字段用逗號分隔
  • size: 設置search是返回的消息的條數,默認是10
  • from: 設置跳過的頁數,默認是0,可以通過from和size來達到分頁的目的
  • sort: 指定對那個字段進行什么排序,默認是按照相關性評分來降續排序的_score, 例如sort=date:desc&sort=_score
  • version: 版本號,用于更新和刪除操作,當文檔的版本等于指定的版本號時才能正常執行,否則會返回409 版本沖突 (樂觀并發控制)
  • ersion_type=external 用于創建、修改、刪除操作 外部版本號:當使用外部版本號是es會檢查版本號是否比_version值小,如果小的話就正常執行,并將_version的值更改為外部的版本號, 例如version=5&version_type=external
  • timeout=10ms 指定超時時間,默認單位是毫秒ms,也可以指定秒s,例如1s
  • retry_on_conflict=n 參數來設置自動完成這項請求的次數,它的默認值是0,失敗前重新嘗試n次
  • scroll=1m 游標查詢,保持游標查詢窗口一分鐘
// q好像對中文查詢不出啦???可以通過其他方式進行查詢 // 查詢字段包含的字符串q=filed:value, 類似于SQL中的where last_name like '%Smith%' GET /{index}/{type}/_search?q=last_name:Smith // 加號+:表示必須存在,每部分都是包含的意思, 類似于SQL中的where fist_name like '%join%' and like '%Smith%' // + 前綴表示必須與查詢條件匹配。類似地, - 前綴表示一定不與查詢條件匹配。 // 沒有 + 或者 - 的所有其他條件都是可選的,類似于or——匹配的越多,文檔就越相關 GET /{index}/{type}/_search?q=fist_name:join+last_name:Smith' // -號代表不包含, 類似于SQL中的 where name not like '%join%' GET /{index}/{type}/_search?q=-name:join // name包含join但tweet不包含jmary的, 類似于SQL中的 where name like '%join%' and tweet not like '%mary%' GET /{index}/{type}/_search?q=name:join+-tweet:mary // 查詢所有索引所有類型所有字段中包含mary關鍵字的文檔, _all:可以代表所有索引或者所有類型或者所有字段, // 每個文檔都有一個隱形的_all字段,它的數據類型是文本型,它的值是以空格的形式將文檔的所有字段的值拼接起來, 例如一個文檔有三個值 age: 15, name:zhangsan, birthday:2018-09-15, 那么_all的值為“15 zhangsan 2018-09-15” // _all會被分詞,如果字段中包含日期,例如2018-09-15會被分析成2018,09, 15 三個詞條(token) GET /{index}/{type}/_search?q=_all:mary // 如果不指定字段則默認是_all字段, _all字段是String類型 GET /{index}/{type}/_search?q=mary POST /shop/goods/_search?_source=name,pricePOST /shop/goods/_search?timeout=10ms POST /shop/goods/_search?from=0&size=5 POST /shop/goods/_search?sort=create_date:desc&sort=_score

查詢表達式DSL

使用查詢領域特定語言(Query Domain Specific Language) 簡稱為DSL, 需要使用JSON作為主體,請求體查詢

  • query

    • match:模糊匹配,類似于SQL中的like,示例{ “match” : { “field” : “keyword” }},
    • match_all:簡單的匹配所有文檔 {“match_all”: {}}
    • match_phrase: 對于短語或者段落進行精確匹配
    • match_phrase_prefix
    • multi_match: 在多個字段上反復執行相同查詢
    • bool 用于表示復合語句,用于組合多個查詢語句;將多查詢組合成單一查詢
      • must 必須匹配這些條件才能被包含進來,表示并且的關系
      • must_not 必須不 匹配這些條件才能被包含進來
      • should 如果滿足這些語句中的任意語句,將增加 _score ,否則無任何影響。它們主要用于修正每個文檔的相關性得分。
      • minimum_should_match:控制需要匹配的 should 語句的數量, 它既可以是一個絕對的數字,又可以是個百分比, 如 minimum_should_match: 2 或者 “minimum_should_match”: “75%”
      • filter 必須匹配,但它以不評分、過濾模式來進行。這些語句對評分沒有貢獻,只是根據過濾標準來排除或包含文檔, filter只是簡單的數據過濾,并不影響評分,因filter不計算評分,所以性能更好,請盡可能多的使用過濾式查詢
        • exists 查找包含某個字段的文檔
    • range 范圍,可以使用大于gt、大于等于gte、小于lt、小于等于lte作為查詢條件,可用于數字、日期類型、字符串
    • term 精確查詢,對數值,日期,布爾,not_analyzed確切值字符串
    • terms 指定多個匹配值,如果字段包含其中的任何一個,都會返回文檔,類似于SQL中的IN 操作
    • constant_score: 恒定分數,它將一個不變的常量評分應用于所有匹配的文檔
    • wildcard: 通配符, ? 匹配任意字符, * 匹配 0 或多個字符
    • fuzzy: 模糊查詢
    • dis_max:分離 最大化查詢(Disjunction Max Query)
    • nested : 用于操作嵌套類型
  • highlight 高亮,匹配的結果會被 HTML字符包裹住,需要指定匹配的字段

  • aggs 聚合操作,類似SQL中的Group By
  • sort 排序
  • from 偏移量,類似于SQL中limit中的offset
  • size 返回數量,類似于SQL中limit中的count,可以通過from,size來達到分頁的效果
// 使用DSL查詢肯能條件很多,比較復雜,可以通過使用驗證API來檢查一個查詢是否有效 GET /{index}/{type}/_validate/query?explain { "query": { ... } }

數據準備

DELETE /shop/goods/_all 刪除所有文檔

match 匹配查詢

全文檢索方式查詢,類似于關系型數據庫中的like操作,使用match時需要指定對那個字段進行全文檢索,以及對應的關鍵字, 關鍵字可以指定一個也可以指定多個,指定多個時表示或者的關系 類似于SQL中的or的功能。語法:
{ "match" : { "field" : "keyword" }} 類似于SQL中的where filed like ‘%keyword%’
{ "match" : { "field" : "keyword1 keyword2" }} 類似于SQL中的where field like ‘%keyword1%’ or field like ‘%keyword2%’

示例:

// 查詢name中包含“女裝”的文檔

GET /shop/goods/_search {"query": {"match": {"name": "女裝"}} }// 多詞查詢 :使用空格隔離多個單詞 // 查詢name中包含“外套” 或者or 包含 “休閑” 的文檔,多個關鍵字使用空格分隔,如果不指定operator默認是or GET /shop/goods/_search {"query": {"match": {"name": "外套 休閑"}} }// "name": "外套 休閑" or 等價于bool中的should GET /shop/goods/_search {"query": {"bool": {"should": ["match": { "name": "外套" },"match": { "name": "休閑" },]}} }// 查詢name中包含“外套” 并且 包含 “休閑” 的文檔,多個關鍵字使用空格分隔 GET /shop/goods/_search {"query": {"match": {"name": "外套 休閑""operator": "and"}} }// "name": "外套 休閑" and 等價于bool中的must GET /shop/goods/_search {"query": {"bool": {"must": ["match": { "name": "外套" },"match": { "name": "休閑" },]}} }// 多詞查詢中使用or只需要滿足一個即可,要求太低,使用and又必須所有詞項都必須滿足,要求又太高, // 使用minimum_should_match折中一下,最小匹配:可以指定一個百分比, // 例如指定4個詞項,一個是詞項是25%,設置成50%就是至少要滿足2個詞項 GET /shop/goods/_search {"query": {"match": {"name": {"query": "春季 長袖 圓領 學生","minimum_should_match": "50%"}}} }// 效果和上面一樣,等價的 GET /shop/goods/_search {"query" : {"bool": {"filter": {"bool" : {"should" : [{ "term" : {"name" : "春季"}}, { "term" : {"name" : "長袖"}}, { "term" : {"name" : "圓領"}}, { "term" : {"name" : "學生"}}],"minimum_should_match": 2}}}} }// 查詢日期 GET /shop/goods/_search {"query": {"match": {"create_date": "2018-01-31"}} }

match一般用于用引號括起來的值,如文本,日期,如果將match用于布爾或者數字等數據類型就變成精確匹配了,而不是全文檢索或者模糊匹配了
如果在一個精確值的字段上使用match,例如數字、日期、布爾或者一個 not_analyzed 字符串字段,那么它將會精確匹配給定的值:

match_all

簡單的匹配所有文檔

GET /shop/goods/_search {"query": {"match_all": {}} }// 上面簡寫成這樣,效果是一樣的 GET /shop/goods/_search {}// 同樣也可以去掉{},更加簡潔 GET /shop/goods/_search

match_phrase

對于短語或者段落進行精確匹配,

// match如果對一小段文本進行查詢,match首先對字段值進行分詞,然后對分詞進行匹配,相當于SQL中的name like '%女裝%' or name like '%冬季%' or name like '%外套%' GET /shop/goods/_search {"query": {"match": {"name": "女裝冬季外套"}} }GET /shop/goods/_search {"query": {"match_phrase": {"name": "女裝冬季外套"}} } // slop:讓相對詞序位置不那么嚴格 // 注意上面使用的是“女裝冬季外套”,而現在使用的是“套女裝冬季”, slop:允許每個詞放寬的間隔 // 盡管詞語的順序不正確,查詢仍然能匹配,因為我們為它設置了足夠高的slop值使匹配時的詞序有更大的靈活性。 GET /shop/goods/_search {"query": {"match_phrase": {"name": {"query": "外套女裝冬季","slop": 10}}} }

match_phrase_prefix

match_phrase_prefix與match_phrase是一樣的,只是它允許在文本的最后一項中使用前綴匹配。

可以用于即時搜索(instant search) 或 輸入即搜索(search-as-you-type),例如,如果用戶輸入 johnnie walker bl ,我們希望在它們完成輸入搜索條件前就能得到:Johnnie Walker Black Label 和 Johnnie Walker Blue Label 。

GET /shop/goods/_search {"query": {"match_phrase_prefix": {"name": "女裝冬季外套"}} }// slop:讓相對詞序位置不那么嚴格 // 注意上面使用的是“女裝冬季外套”,而現在使用的是“套女裝冬季”, slop:允許每個詞放寬的間隔 // 盡管詞語的順序不正確,查詢仍然能匹配,因為我們為它設置了足夠高的slop值使匹配時的詞序有更大的靈活性。 GET /shop/goods/_search {"query": {"match_phrase_prefix": {"name": {"query": "外套女裝冬季","slop": 10}}} }

prefix 查詢存在嚴重的資源消耗問題,短語查詢的這種方式也同樣如此。前綴 a 可能會匹配成千上萬的詞,這不僅會消耗很多系統資源,而且結果的用處也不大。

索引時輸入即搜索

## edge_ngram 自定義過濾器、分詞器 PUT /my_index {"settings": {"number_of_shards": 1, "analysis": {"filter": {"autocomplete_filter": { "type": "edge_ngram","min_gram": 1,"max_gram": 20}},"analyzer": {"autocomplete": {"type": "custom","tokenizer": "standard","filter": ["lowercase","autocomplete_filter" ]}}}} }## 測試分詞 GET /my_index/_analyze {"analyzer": "autocomplete","text": "quick brown" }PUT /my_index/_mapping/my_type {"my_type": {"properties": {"name": {"type": "text","analyzer": "autocomplete", ## 使用自定義的分詞器"search_analyzer": "standard" ## 配置查詢對應的分詞器}}} }POST /my_index/my_type/_bulk { "index": { "_id": 1 }} { "name": "Brown foxes" } { "index": { "_id": 2 }} { "name": "Yellow furballs" }## 搜索 GET /my_index/my_type/_search {"query": {"match": {"name": {"query": "brown fo"}}} }

multi_match

多個字段上使用相同的值作為查詢條件

GET /shop/goods/_search {"query": {"multi_match": {"query": 268,"fields": ["price", "quantity"]}} }// 兩者效果相同 GET /shop/goods/_search {"query": {"bool": {"should": [{ "term": { "price": { "value": 268 } } },{ "term": { "quantity": { "value": 268 } } }]}} }// 查詢字段名稱的模糊匹配 // 字段名稱可以用模糊匹配的方式給出:任何與模糊模式正則匹配的字段都會被包括在搜索條件中, 例如可以使用以下方式同時匹配 book_title 、 chapter_title 和 section_title (書名、章名、節名)這三個字段:{"multi_match": {"query": "Quick brown fox","fields": "*_title"} }// 提升單個字段的權重 // 可以使用 ^ 字符語法為單個字段提升權重,在字段名稱的末尾添加 ^boost ,其中 boost 是一個浮點數: // chapter_title 這個字段的 boost 值為 2 ,而*_title 字段的默認 boost 值為 1 {"multi_match": {"query": "Quick brown fox","fields": [ "*_title", "chapter_title^2" ] (1)} }

constant_score 常量分數

通常當查找一個精確值的時候,我們不希望對查詢進行評分計算。只希望對文檔進行包括或排除的計算,所以我們會使用 constant_score 查詢以非評分模式來執行 term 查詢并以一作為統一評分。

它將一個不變的常量評分應用于所有匹配的文檔。它被經常用于你只需要執行一個 filter 而沒有其它查詢(例如,評分查詢)的情況下。可以使用它來取代只有 filter 語句的 bool 查詢。在性能上是完全相同的,但對于提高查詢簡潔性和清晰度有很大幫助. 這種方式可以用來取代只有 filter 語句的 bool 查詢

GET /shop/goods/_search {"query": {"constant_score": {"filter": {"term": {"price": 268.00}}}} }

查詢置于 filter 語句內不進行評分或相關度的計算,所以所有的結果都會返回一個默認評分 1

prefix 前綴查詢

前綴查詢:要查詢的字段必須沒有分詞

默認狀態下, prefix 查詢不做相關度評分計算,它只是將所有匹配的文檔返回,并為每條結果賦予評分值 1 。它的行為更像是過濾器而不是查詢。 prefix 查詢和 prefix 過濾器這兩者實際的區別就是過濾器是可以被緩存的,而查詢不行。

prefix 查詢或過濾對于一些特定的匹配是有效的,但使用方式還是應當注意。當字段中詞的集合很小時,可以放心使用,但是它的伸縮性并不好,會對我們的集群帶來很多壓力。可以使用較長的前綴來限制這種影響,減少需要訪問的量。

PUT /my_index {"mappings": {"address": {"properties": {"postcode": {"type": "keyword"}}}} }PUT /my_index/address/1 { "postcode": "W1V 3DG" }PUT /my_index/address/2 { "postcode": "W2F 8HW" }PUT /my_index/address/3 { "postcode": "W1F 7HW" }PUT /my_index/address/4 { "postcode": "WC1N 1LZ" }PUT /my_index/address/5 { "postcode": "SW5 0BE" }// prefix 查詢 GET /my_index/address/_search {"query": {"prefix": {"postcode": {"value": "W1"}}} }

wildcard 和 regexp

與 prefix 前綴查詢的特性類似, wildcard 通配符查詢也是一種底層基于詞的查詢,與前綴查詢不同的是它允許指定匹配的正則式。它使用標準的 shell 通配符查詢: ? 匹配任意字符, * 匹配 0 或多個字符。

GET /my_index/address/_search {"query": {"wildcard": {"postcode": "W?F*HW" }} }// 詞必須以 W 開頭,緊跟 0 至 9 之間的任何一個數字,然后接一或多個其他字符 GET /my_index/address/_search {"query": {"regexp": {"postcode": "W[0-9].+" }} }

wildcard 和 regexp 查詢的工作方式與 prefix 查詢完全一樣,它們也需要掃描倒排索引中的詞列表才能找到所有匹配的詞,然后依次獲取每個詞相關的文檔 ID ,與 prefix 查詢的唯一不同是:它們能支持更為復雜的匹配模式。

這也意味著需要同樣注意前綴查詢存在性能問題,對有很多唯一詞的字段執行這些查詢可能會消耗非常多的資源,所以要避免使用左通配這樣的模式匹配(如: *foo 或 .*foo 這樣的正則式)。

數據在索引時的預處理有助于提高前綴匹配的效率,而通配符和正則表達式查詢只能在查詢時完成,盡管這些查詢有其應用場景,但使用仍需謹慎。

prefix 、 wildcard 和 regexp 查詢是基于詞操作的,如果用它們來查詢 analyzed 字段,它們會檢查字段里面的每個詞,而不是將字段作為整體來處理。


range

用于查詢一個區間,一般用于日期和數值,支持 gt、gte、lt、lte, 示例{“range”: { “age”: { “gte”: 20, “lt”:30 }}} 類似于SQL中的 wher age >= 20 and age < 30

GET /shop/goods/_search {"query": {"range": {"price": {"gt": 200,"lte": 500}}} }// 日期類型 GET /shop/goods/_search {"query": {"range": {"create_date": {"gt" : "2014-01-01 00:00:00","lt" : "2014-01-07 00:00:00"}}} }// 日期計算:過去一小時 GET /shop/goods/_search {"query": {"range": {"create_date": {"gt" : "now-1h"}}} }// 日期計算:早于 2014 年 1 月 1 日加 1 月(2014 年 2 月 1 日 零時) GET /shop/goods/_search {"query": {"range": {"create_date": {"gt" : "2014-01-01 00:00:00","lt" : "2014-01-01 00:00:00||+1M"}}} }// 作用于字符串,性能相對較慢 "range" : {"title" : {"gte" : "a","lt" : "b"} }

term

精確查詢:用于精確值匹配,對數值,日期,布爾,not_analyzed確切值字符串, term 查詢對于輸入的文本不 分析 ,所以它將給定的值進行精確查詢。

GET /shop/goods/_search {"query": {"term": {"is_discount": {"value": true}}} }

terms

同term查詢,但是它允許指定多個匹配值,一般用于數組,如果字段包含其中的任何一個,都會返回文檔, 類似于where tag IN (‘value1’, ‘value2’, ‘value3’) 例如:{ “terms”: { “tag”: [ “search”, “full_text”, “nosql” ] }}

GET /shop/goods/_search {"query": {"terms": {"colors": ["白藍紅","綠色"]}} }

exists

對于相同類型的文檔,可能有的文檔有某個字段,有的文檔沒有某個字段,查找包含或者不包含某個字段的文檔, 例如: {“exists”: { “field”: “title” }} ,exists 用于查找那些指定字段中是否有值 , 相當于SQL中的IS NOT NULL

null, [] (空數組)和 [null] 所有這些都是等價的,它們無法存于倒排索引中

這些查詢經常用于某個字段有值的情況和某個字段缺值的情況。

// 存在某個字段 GET /shop/goods/_search {"query": {"bool": {"filter": {"exists": {"field": "activity"}}}} }// 不存在某個字段 GET /shop/goods/_search {"query": {"bool": {"must_not": {"exists": {"field": "activity"}}}} }POST /my_index/posts/_bulk { "index": { "_id": "1" }} { "tags" : ["search"] } { "index": { "_id": "2" }} { "tags" : ["search", "open_source"] } { "index": { "_id": "3" }} { "other_field" : "some data" } { "index": { "_id": "4" }} { "tags" : null } { "index": { "_id": "5" }} { "tags" : ["search", null] }以上文檔集合中 tags 字段對應的倒排索引如下: Token DocIDs open_source 2 search 1,2,51. tags 字段有 1 個值。 2. tags 字段有 2 個值。 3. tags 字段缺失。 4. tags 字段被置為 null5. tags 字段有 1 個值和 1null// 1,2,5 滿足條件 GET /my_index/posts/_search {"query" : {"constant_score" : {"filter" : {"exists" : { "field" : "tags" }}}} }

highlight:高亮

匹配的結果會被 HTML字符包裹住,需要指定匹配的字段,”highlight”: {“fields” : {“about” : {}}}

// 高亮: 匹配的結果會被 <em></em> HTML字符包裹住: curl -i -H 'Content-Type: application/json' -XGET 'http://localhost:9200/megacorp/employee/_search' -d ' {"query" : {"match_phrase" : {"about" : "rock climbing"}},"highlight": {"pre_tags" : ["<font color='red'>"],"post_tags" : ["</font>"],"fields" : {"about" : {}}} }'

sort

排序,可以指定一個或者多個字段排序,多個字段使用數組包圍,例如:”sort”: { “date”: { “order”: “desc” }}

// 排序,默認情況下是按照相關性評分排序的,最相關的文檔排在最前, 默認按_score排序的 // 多級排序,使用date, _score排序 GET /_search { "query" : { "bool" : { "must": { "match": { "tweet": "manage text search" }}, "filter" : { "term" : { "user_id" : 2 }} } }, "sort": [ { "date": { "order": "desc" }}, { "_score": { "order": "desc" }},{ "ids" : { "order": "asc", "mode": "min"}} ] } mode:一般用于數組,可以使用minmaxavg 或是 sum,統計計算數組的指定值排序

對字符串排序,sort對字符串排序需要使用到原始值raw,正常情況下文本可能會使用分詞器進行分詞,而分詞器會影響正常的排序,這時可以對同一個字段設置兩種類型,對文本設置成text類型,并設置分詞器,如果要搜索的話使用text類型字段,然后再為該字段設置一個原始值,該原始值raw字段的fields的數據類型設置為keyword,關鍵字數據類型是不分詞的,不分詞的字段可以作為字符串的排序

// fields 多字段:相當于對同一個字段值起不同的名字,賦予這個字段不同的屬性(如類型不同,分詞器不同等) PUT /school {"mappings": {"students": {"properties": {"name": {"type": "text","analyzer": "ik_max_word","fields": {"raw": {"type": "keyword"} }}}}} }// _score 和 max_score 字段都是 null 。計算 _score 的花銷巨大,通常僅用于排序; 我們并不根據相關性排序,所以記錄 _score 是沒有意義的。如果無論如何你都要計算 _score , 你可以將 track_scores 參數設置為 true GET /school/students/_search {"query": { "match": { "name": "abc" } }, "sort": [ { "name.raw": { "order": "desc" } } ] }// 強制計算評分 GET /school/students/_search {"track_scores": true,"query": { "match": { "name": "abc" } }, "sort": [ { "name.raw": { "order": "desc"} } ] }

from

偏移量,類似于SQL中limit中的offset

size

返回數量,類似于SQL中limit中的count,可以通過from,size來達到分頁的效果

GET /shop/goods/_search {"from": 0,"size": 20 }

游標查詢Scroll

使用from, size做分頁不能分頁太深,太深對性能營銷較大,一般獲取前1000條數據就算深了,游標查詢用于解決深度分頁帶來的性能問題。

scroll 查詢可以用來對Elasticsearch有效地執行大批量的文檔查詢,而又不用付出深度分頁那種代價。游標查詢允許我們 先做查詢初始化,然后再批量地拉取結果。 這有點兒像傳統數據庫中的 cursor 。游標查詢會取某個時間點的快照數據,查詢初始化之后索引上的任何變化會被它忽略。 它通過保存舊的數據文件來實現這個特性,結果就像保留初始化時的索引 ‘視圖’ 一樣。

深度分頁的代價根源是結果集全局排序,如果去掉全局排序的特性的話查詢結果的成本就會很低。 游標查詢用字段_doc來排序。 這個指令讓 Elasticsearch 僅僅從還有結果的分片返回下一批結果。啟用游標查詢可以通過在查詢的時候設置參數 scroll 的值為我們期望的游標查詢的過期時間,游標查詢的過期時間會在每次做查詢的時候刷新,所以這個時間只需要足夠處理當前批的結果就可以了,而不是處理查詢結果的所有文檔的所需時間。 這個過期時間的參數很重要,因為保持這個游標查詢窗口需要消耗資源,所以我們期望如果不再需要維護這種資源就該早點兒釋放掉。 設置這個超時能夠讓 Elasticsearch 在稍后空閑的時候自動釋放這部分資源。

// 保持游標查詢窗口一分鐘 // 關鍵字 _doc 是最有效的排序順序。 GET /shop/goods/_search?scroll=1m {"query": {"match_all": {}},"sort": ["_doc"],"size": 1000 }// 這個查詢的返回結果包括一個字段 _scroll_id, 它是一個base64編碼的長字符串 。 現在我們能傳遞字段 _scroll_id 到 _search/scroll {"_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAMoFmQ0clZDNEg4UWYtYTBzVTg0QWRFdmcAAAAAAAADKRZkNHJWQzRIOFFmLWEwc1U4NEFkRXZnAAAAAAAAAyoWZDRyVkM0SDhRZi1hMHNVODRBZEV2ZwAAAAAAAAMrFmQ0clZDNEg4UWYtYTBzVTg0QWRFdmcAAAAAAAADLBZkNHJWQzRIOFFmLWEwc1U4NEFkRXZn","took": 1,"timed_out": false,... }// 查詢接口獲取下一批結果: GET /_search/scroll {"scroll": "1m","scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAKbFmQ0clZDNEg4UWYtYTBzVTg0QWRFdmcAAAAAAAACnBZkNHJWQzRIOFFmLWEwc1U4NEFkRXZnAAAAAAAAAp0WZDRyVkM0SDhRZi1hMHNVODRBZEV2ZwAAAAAAAAKeFmQ0clZDNEg4UWYtYTBzVTg0QWRFdmcAAAAAAAACnxZkNHJWQzRIOFFmLWEwc1U4NEFkRXZn" }

這個游標查詢返回的下一批結果。 盡管我們指定字段 size 的值為1000,我們有可能取到超過這個值數量的文檔。 當查詢的時候, 字段 size 作用于單個分片,所以每個批次實際返回的文檔數量最大為 size * number_of_primary_shards.

注意游標查詢每次返回一個新字段 _scroll_id。每次我們做下一次游標查詢, 我們必須把前一次查詢返回的字段 _scroll_id 傳遞進去。 當沒有更多的結果返回的時候,我們就處理完所有匹配的文檔了。

bool

布爾查詢,這是一個很重要的查詢,它可以將其它多種查詢封裝成一個大的查詢,可以使用邏輯操作符(類似于sql中的and、not、or)來組裝各個條件, 這是個復合過濾器(compound filter) ,它可以接受多個其他過濾器作為參數,并將這些過濾器結合成各式各樣的布爾(邏輯)組合

用于表示復合語句,用于組合多個查詢語句;將多查詢組合成單一查詢,bool可以放到query下面,也可以嵌套在某個子條件(must、should、must_not)里, 通過嵌套可以構造出更加復雜的過濾條件。

  • must: 必須匹配這些條件才能被包含進來。 表示并且的關系,與 SQL中的AND 等價,例如{"must": [{"match": {"desc": "xxx"}}, {"term": { "quantity": 999}}]},類似于SQL中的where desc like '%xxx%' and quantity = 999
  • must_not: 必須不匹配這些條件才能被包含進來, 是對must的取反操作,與SQL中的 != 或者<> 等價, where status != 0
  • should 至少有一個語句要匹配, 與 SQL中的 OR 等價,是一個數組,可以有多個值,如果滿足這些語句中的任意語句,將增加_score的值, should的作用:or邏輯,如果滿足條件評分_score更高
  • filter:必須匹配,以過濾模式來進行。這些語句對評分沒有貢獻,只是根據過濾標準來排除或包含文檔, filter只是簡單的數據過濾,并不影響評分
  • minimum_should_match

bool 查詢會為每個文檔計算相關度評分 _score ,再將所有匹配的 must 和 should 語句的分數 _score 求和,最后除以 must 和 should 語句的總數。

must_not 語句不會影響評分;它的作用只是將不相關的文檔排除。

所有must語句必須匹配,所有must_not語句都必須不匹配,經測試至少有一個should需要匹配的(在should中寫兩個條件,每天條件都不滿足條件,結果沒有任何文檔滿足),當沒有 must 語句的時候,至少有一個 should 語句必須匹配。

GET /shop/goods/_search {"query": {"bool": {"must": [{"term": {"quantity": {"value": 999}}}], "must_not": [{"term": {"quantity": {"value": 9267}}}],"should": [{"term": {"is_discount": {"value": true}}}],"filter": {"range": {"price": {"gte": 7777,"lte": 9999}}}}} } // filter中也可以嵌套bool查詢,這樣內部的bool查詢就不參與評分了 // bool中的must must_not should 等會計算評分的,如果不希望計算評分,可將bool放入到filter中,這樣既不計算評分又可以使用bool中的邏輯 // 直接使用bool中的filter和將bool再次嵌入到filter中都不計算評分 GET /shop/goods/_search {"query": {"bool": {"must": { "match": { "title": "how to make millions" }},"must_not": { "match": { "tag": "spam" }},"should": [{ "match": { "tag": "starred" }}],"filter": {"bool": { "must": [{ "range": { "date": { "gte": "2014-01-01" }}},{ "range": { "price": { "lte": 29.99 }}}],"must_not": [{ "term": { "category": "ebooks" }}]}}}} }// 就像我們能控制 match 查詢的精度 一樣,我們可以通過 minimum_should_match 參數控制需要匹配的 // should 語句的數量, 它既可以是一個絕對的數字,又可以是個百分比: // 這個查詢結果會將所有滿足以下條件的文檔返回: // title 字段包含 "brown" AND "fox" 、 "brown" AND "dog" 或 "fox" AND "dog" 。 // 如果有文檔包含所有三個條件,它會比只包含兩個的文檔更相關。 GET /my_index/my_type/_search {"query": {"bool": {"should": [{ "match": { "title": "brown" }},{ "match": { "title": "fox" }},{ "match": { "title": "dog" }}],"minimum_should_match": 2 }} }// boost 參數被用來提升一個語句的相對權重( boost 值大于 1 )或降低相對權重( boost 值處于 0 到 1 之間), // 但是這種提升或降低并不是線性的,換句話說,如果一個 boost 值為 2 ,并不能獲得兩倍的評分 _score 。 // 通過指定 boost 來控制任何查詢語句的相對的權重, boost 的默認值為 1 ,大于 1 會提升一個語句的相對權重。 // 更高的 boost 值為我們帶來更高的評分 _score GET /_search {"query": {"bool": {"must": {"match": { "content": {"query": "full text search","operator": "and"}}},"should": [{ "match": {"content": {"query": "Elasticsearch","boost": 3 }}},{ "match": {"content": {"query": "Lucene","boost": 2 }}}]}} }

過濾查詢:不需要評分,性能更好,對結果進行緩存
評分查詢:需要評分,評分比較費力,不對結果進行緩存
如何選擇查詢與過濾? 通常的規則是,使用查詢(query)語句來進行 全文搜索或者其它任何需要影響相關性得分的搜索。除此以外的情況都使用過濾(filters)。

aggs

聚合操作,類似SQL中的Group By, 支持的聚合類型有avg, min, max, sum, rang 等,也可以對地理位置進行聚合

如果要對一個字段進行聚合,要保證這個字段的fielddata設置為true

PUT /{index}/_mapping/{type} {"properties": {"FILED": {"type": "text","fielddata": true}} } // 統計數組中每個元素出現的次數,中文有問題,現在中文分詞是按單個字分詞的,估計需要指定對該字段不分詞 GET /shop/goods/_search {"aggs": {"xxx": {"terms": {"field": "colors","size": 10}}} }// aggs可以嵌套在aggs中使用 // 嵌套聚合,分級匯總,在聚合中可以進行再聚合,意思是對分組的文檔進行其他聚合,而不是對聚合結果進行處理 GET /shop/goods/_search {"aggs": {"xxx": {"terms": {"field": "colors","size": 10},"aggs": {"yyy": {"avg": {"field": "price"}}}}} }

_mget

multi-get,通過docs數組作為參數指定多個doc來獲取多個文檔,每個doc可以分別指定索引、類型、id,文檔或者api中必須包含index/type/id

// 路徑中不包含index、type、id GET /_mget {"docs" : [{"_index" : "shop","_type" : "goods","_id" : 2},{"_index" : "account","_type" : "users","_id" : 1,"_source": "nickname"}] }// 路徑中包含index、type, 如果參數中沒有指定index、type就使用路徑中的,如果參數中明確指定了,就使用參數中的索引和類型 GET /{index}/{type}/_mget {"docs" : [{ "_id" : 2 },{ "_type" : "account", "_id" : 1 }] }// 路徑中指定了索引和類型,通過ids數組指定多個id值 GET /{index}/{type}/_mget' {"ids" : [ "2", "1" ] }

_bulk

批量操作:將多個操作封裝成一個操作,一次執行多個動作(create,index, update以及delete),并返回每個執行結果.
可以通過_bulk來執行批量插入、批量更新等操作

POST _bulk的請求主體的格式稍微有些不同:

{ action: { metadata }}\n { request body }\n { action: { metadata }}\n { request body }\n ...

它通過換行符(\n)連接到一起,最后一行也要有\n,每行一定要以換行符(\n)結尾, 包括最后一行 。這些換行符被用作一個標記,可以有效分隔行,這些行不能包含未轉義的換行符,因為他們將會對解析造成干擾

  • action 必須是以下選項之一:
    • create:如果文檔不存在,那么就創建它, 相當于 PUT /{index}/{type}/{id}/_create
    • index:創建一個新文檔或者替換一個現有的文檔, 相當于 PUT /{index}/{type}/{id}
    • update:部分更新一個文檔, 即局部更新文檔中的個別字段,相當于 /{index}/{type}/{id}/_update
    • delete:刪除一個文檔,刪除操作不需要指定請求體,delete操作沒有請求體,它緊接著另一個行為;記得最后一個換行符
  • metadata 每個動作需要的參數,json格式的,應該指定被索引、創建、更新或者刪除的文檔的_index,_type和 _id

每個子請求都是獨立執行,因此某個子請求的失敗不會對其他子請求的成功與否造成影響。 如果其中任何子請求失敗,最頂層的 error 標志被設置為 true ,并且在相應的請求報告出錯誤明細
這也意味著 bulk 請求不是原子的: 不能用它來實現事務控制。每個請求是單獨處理的,因此一個請求的成功或失敗不會影響其他的請求

POST /_bulk { "create": { "_index": "shop", "_type": "goods", "_id": 123 }} { "name": "My first blog post" } { "index": { "_index": "shop", "_type": "goods" }} { "name": "My second blog post" } { "update": { "_index": "shop", "_type": "goods", "_id": 123, "retry_on_conflict" : 3} } { "doc" : {"title" : "My updated blog post"} } { "delete": { "_index": "shop", "_type": "goods", "_id": 1234 }}

我的微信公眾號:

總結

以上是生活随笔為你收集整理的Elasticsearch入门教程(五):Elasticsearch查询(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

亚洲精品在线视频 | 精品久久久免费视频 | 伊人色综合久久天天 | 97电影院网 | 亚洲婷婷网 | 久久国产精品一国产精品 | 久久婷亚洲五月一区天天躁 | aaa日本高清在线播放免费观看 | 99国产精品免费网站 | 欧美 日韩 性 | 日韩精品欧美专区 | 国产a级免费| 欧美色综合天天久久综合精品 | 99久久精品免费看国产麻豆 | 中文字幕在线观看视频一区二区三区 | 国产麻豆剧传媒免费观看 | 国产成人a亚洲精品 | 精品国产亚洲在线 | 国产96在线 | 在线观看黄网站 | 波多野结衣综合网 | 国产精品久久久久久久久久久久冷 | 三级黄色片子 | 日本性生活免费看 | 欧美老少交 | 天天草综合 | 欧美视频www | av在线收看 | 欧美人zozo| 中文字幕免费久久 | 91福利视频一区 | 亚洲精品在线视频网站 | 成人不用播放器 | 国产视频日韩视频欧美视频 | 日韩在线视频一区二区三区 | 亚洲免费在线看 | 国产一区二区久久久久 | 99久久精品免费看国产一区二区三区 | 久久久久成人精品亚洲国产 | 亚洲狠狠干 | 中文字幕国产视频 | 91爱爱中文字幕 | 亚洲精品综合一二三区在线观看 | 日韩精品视频免费 | 三级黄色片在线观看 | 最新国产福利 | a在线免费观看视频 | 最近中文字幕大全中文字幕免费 | 五月激情电影 | 精品国产一区二区三区久久久 | 国产精品1区2区3区在线观看 | 免费日韩电影 | 欧美日韩首页 | 五月婷婷操 | 日韩视频二区 | 97av在线| 国产亚洲精品成人av久久影院 | 亚洲日本va中文字幕 | 69精品久久久 | 精品国产精品久久一区免费式 | 丁香免费视频 | 亚洲国产精品久久久久 | 国产最新视频在线观看 | a黄色片在线观看 | 97视频免费 | 欧美精品久久久久久久亚洲调教 | 丝袜+亚洲+另类+欧美+变态 | 久久99热这里只有精品 | 国产精品久久综合 | 久久精品一区二区国产 | 婷婷五情天综123 | 在线精品视频免费观看 | 夜夜骑日日 | 久久精视频 | 亚洲精品视频网址 | 91视频免费网站 | 片网站 | 久久精品99国产精品 | 国产99色 | 免费不卡中文字幕视频 | 一区精品久久 | 欧美一区二区三区四区夜夜大片 | 国产精品乱码久久久久久1区2区 | 又黄又色又爽 | 视频二区 | 国产精品美女久久久久久2018 | 免费在线国产黄色 | 一区二区三区四区五区六区 | 夜夜夜精品| 亚洲天堂网视频在线观看 | 国产精品久久久免费 | 在线亚洲成人 | 日韩丝袜视频 | 成年美女黄网站色大片免费看 | 久久精品96 | 久久九九国产视频 | 九色视频网站 | 久久久久久久久久久久久久av | www.91av在线 | 在线观看亚洲精品 | 香蕉97视频观看在线观看 | 99国产成+人+综合+亚洲 欧美 | 麻豆视频在线 | 亚洲日本色 | 精品久久久久久久久久久久久久久久久久 | 成人在线播放免费观看 | 久久人人爽人人人人片 | 国产精品亚州 | 99久久婷婷国产综合亚洲 | 欧美日韩一区二区三区视频 | 精品国产1区二区 | 欧美日韩精品在线播放 | 亚洲女同videos | 精品视频123区在线观看 | 免费看成年人 | 亚洲综合在线五月天 | 日韩在线观看一区二区三区 | 一区二区三区四区精品视频 | 69精品人人人人 | 欧美午夜久久 | 久久久久久久99精品免费观看 | 欧美日韩调教 | 色婷婷激情五月 | 狠狠躁夜夜躁人人爽超碰91 | 成人在线播放av | 超碰免费久久 | 欧美日韩免费观看一区=区三区 | 国产精品 视频 | 天堂久色 | 五月天激情综合 | 久久久久北条麻妃免费看 | 亚洲精品网站在线 | 国产一二三四在线视频 | 综合激情网... | 久操中文字幕在线观看 | 97看片吧| 久久综合久久88 | 日韩精品不卡在线 | 丁香婷婷射 | 免费美女av | 日本黄色免费电影网站 | 波多野结衣久久精品 | 国产午夜在线 | 国产亚洲情侣一区二区无 | 天天草网站| 精品国产理论片 | 91av原创| 日韩成人黄色 | 四虎在线观看 | 99热在线看 | 久久私人影院 | 又长又大又黑又粗欧美 | 久草在线免费在线观看 | av中文字幕网| 欧美日韩一区二区三区不卡 | 国产白浆视频 | 国产精品久久久久久久久久久免费看 | 久草新在线 | av高清在线观看 | 人人插超碰 | 丁香在线观看完整电影视频 | www.天天草| 亚洲三级av | 国产精品一区二区在线免费观看 | 亚洲精品伦理在线 | 天天摸日日摸人人看 | 国产成人福利在线 | 免费看国产一级片 | 国产色视频 | 色婷婷综合激情 | 911香蕉视频| 欧美 日韩精品 | 免费久草视频 | 91麻豆精品国产91久久久使用方法 | 亚洲最新av在线网址 | 人人爽人人 | 亚洲免费在线观看视频 | 天天翘av | 中文字幕免费成人 | 婷婷综合伊人 | 久久免费99精品久久久久久 | 久久影视一区二区 | 在线精品亚洲一区二区 | 中文字幕成人一区 | 日韩国产精品久久久久久亚洲 | 99精品国产99久久久久久福利 | 九色精品免费永久在线 | 欧美成人精品在线 | 免费在线一区二区 | 日韩欧美69 | 热99久久精品 | 国产视频精品网 | 婷婷六月丁香激情 | 日韩欧美xxxx | 91精品在线免费视频 | 久久成人18免费网站 | 欧美a级成人淫片免费看 | 亚洲一级黄色av | 国产你懂的在线 | 久久免费毛片视频 | 国产区 在线| 国产精品九九九九九九 | 亚洲日本中文字幕在线观看 | 久久久国际精品 | 91精品高清| 欧美日韩三区二区 | 黄网站免费大全入口 | 免费在线观看一区 | 欧美激精品 | av中文在线影视 | 999亚洲国产996395 | 国产亚洲亚洲 | 一区二区视频在线播放 | 午夜在线观看影院 | 国产美女精品视频 | 国产美女视频网站 | 色综合天天色综合 | 久久伊人国产精品 | 91精品一区二区在线观看 | 97视频免费在线看 | 免费看的黄色录像 | av爱干| 精品专区一区二区 | 久久久综合香蕉尹人综合网 | 国产一区私人高清影院 | 亚洲激色 | 国产精品美女免费看 | 美女在线观看av | 成人网看片 | 国内精品久久影院 | 天天干天天做天天爱 | 日韩电影中文字幕在线观看 | 免费看黄色毛片 | 日韩成人不卡 | 久久综合久色欧美综合狠狠 | 国产精品久久久一区二区 | 国产特级毛片 | 久久99电影 | 国产婷婷| 国产精品久久久久三级 | av丁香| 免费黄色在线播放 | 久久精品aaa | 97精品欧美91久久久久久 | 日韩综合精品 | 69精品在线观看 | 亚洲黄色三级 | 天天干天天草天天爽 | 一区二区三区在线观看免费 | 亚洲免费视频在线观看 | 久久久.com| 色婷婷九月 | 一级理论片在线观看 | 天天操夜操 | 一区二区三区日韩在线观看 | 亚洲毛片一区二区三区 | 国产一区二区精品 | 超碰在线资源 | www.国产在线 | 久久激情婷婷 | 亚洲日本精品视频 | 国产精品久久久久久久久久久免费 | 99精品国产福利在线观看免费 | 国产精品亚洲综合久久 | 日韩免费视频观看 | 91精品久久久久久综合乱菊 | 国产不卡在线 | 日韩高清在线看 | 久久综合成人网 | 亚洲人成人在线 | 午夜精品久久久久久中宇69 | 国产精品剧情在线亚洲 | 天天色天天艹 | 日本精品视频一区 | 99久久er热在这里只有精品15 | 亚洲天堂色婷婷 | 99视频精品全国免费 | 五月婷婷在线播放 | 91福利影院在线观看 | 精品视频123区在线观看 | 婷婷综合网 | 一区二区三区国产精品 | 日韩电影在线看 | 久久视频在线 | 九色精品免费永久在线 | 一本一本久久aa综合精品 | 国产精品欧美 | 精品欧美一区二区在线观看 | 亚洲国产免费av | 九九九九九九精品 | 久久国产精品一区二区三区 | 天天色天天干天天色 | 免费久久99精品国产婷婷六月 | 成人毛片网 | 欧美日韩久久不卡 | 国产精品女主播一区二区三区 | 国产精品免费成人 | 一区二区免费不卡在线 | 亚洲黄色网络 | 国产99区 | www.色综合.com| 成人免费视频在线观看 | 国产精品专区在线 | 欧美在线视频一区二区 | 人人射人人爽 | 国内外激情视频 | 91中文字幕一区 | 色婷久久 | 久久久免费观看 | 97成人精品视频在线观看 | 国产高清无线码2021 | 久久久久综合精品福利啪啪 | 中文字幕在线资源 | 三级小视频在线观看 | 久久国产精品区 | a天堂免费 | 国产精品视频永久免费播放 | 亚洲日本va午夜在线电影 | 808电影 | 亚洲综合色视频在线观看 | 欧美成人91 | 夜夜高潮夜夜爽国产伦精品 | 色片网站在线观看 | 91手机在线看片 | 五月天婷婷视频 | 日韩免费观看视频 | 91日韩精品视频 | 国产日韩在线看 | 欧美日本国产在线观看 | 婷婷午夜天 | 最新日本中文字幕 | 91成人黄色| 国产精品精品 | 深夜免费小视频 | 黄网站免费看 | 中文字幕在线看视频国产中文版 | 又色又爽又激情的59视频 | 69精品久久久 | 97成人在线 | 国产原创在线 | 日韩二三区 | 国产69精品久久99不卡的观看体验 | 九九爱免费视频 | 久久国内精品99久久6app | 国产手机在线视频 | 婷婷丁香导航 | 五月天激情在线 | 亚洲国产日韩欧美 | 91精品国产高清 | 久久久久久久久久久影视 | 日韩欧美一区二区三区在线观看 | av三级av | 婷婷久久五月 | 国产高清视频免费观看 | 五月婷社区 | 国产精品久久久久久久久久三级 | 国产精品1区2区在线观看 | 亚洲精品五月 | 一区二区不卡 | 中文字幕一区二区三区久久 | 超碰在线公开免费 | 99久久精品免费看国产麻豆 | 亚洲综合色激情五月 | 久草视频在线看 | 国产对白av | 亚洲一级二级 | 四虎成人在线 | 欧美一区二区免费在线观看 | 2019精品手机国产品在线 | 免费观看黄 | 91精品婷婷国产综合久久蝌蚪 | 免费国产在线视频 | 视频福利在线观看 | 超碰在线cao| 国产一区视频在线播放 | 看v片| 久久国产精品色婷婷 | 国产一区视频免费在线观看 | 五月天婷婷视频 | 日韩国产精品久久久久久亚洲 | av短片在线 | 欧美日韩一区二区久久 | 久久久国产精品一区二区中文 | av成人免费网站 | 国产中文 | 亚在线播放中文视频 | 亚洲高清视频在线观看 | 福利一区二区三区四区 | 999久久久精品视频 日韩高清www | 狠狠婷婷 | 天天天操天天天干 | 亚洲国产网站 | 国产精品午夜免费福利视频 | 国产成人精品久久久 | 久草国产精品 | 免费中文字幕在线观看 | 国产白浆视频 | 国产精品theporn | 黄色特级一级片 | 成年人网站免费观看 | 欧美性超爽 | 黄色电影小说 | 日本中文在线播放 | 中文字幕第一页在线播放 | 911精品视频 | 久久久久久久免费 | 精品久久久久久久久久国产 | 成年人免费看片网站 | 欧美精品首页 | 手机在线永久免费观看av片 | 亚洲精品久久在线 | 中文日韩在线 | 9i看片成人免费看片 | 日韩精品久久久免费观看夜色 | 国产精品久久av | 2019中文| 国产精品久久久久久久久久久久 | 日韩电影一区二区在线观看 | 精品久久精品 | 午夜精品电影 | 中文字幕在线免费看 | 欧美精品一区二区在线观看 | 久久精品中文字幕一区二区三区 | 亚洲精品系列 | 国产日韩欧美在线免费观看 | 91精品国产91久久久久 | 99在线免费观看视频 | 欧美性色网站 | 一区二区伦理电影 | 99精品视频免费观看 | 免费看一级片 | 久久一级片 | 久久久久久久久久影视 | 国产麻豆精品95视频 | 精品久久久久久久久久久久 | 涩涩网站在线播放 | 黄色av免费看 | 99热只有精品在线观看 | 中文字幕丝袜一区二区 | 黄色成人在线观看 | 亚洲精品91天天久久人人 | 91精品免费在线 | 91成熟丰满女人少妇 | 国产97视频 | 国内免费久久久久久久久久久 | 黄色一级网 | 色天堂在线视频 | 国产伦理久久精品久久久久_ | 2024av| www.久久99 | 久艹在线观看视频 | 国产精品久久精品 | 2024国产精品视频 | 久草视频免费观 | 国产午夜精品免费一区二区三区视频 | 久久国产经典视频 | www视频在线播放 | 777奇米四色| 久久韩国免费视频 | av免费在线看网站 | 精品一区二三区 | 欧美va天堂va视频va在线 | 久久综合导航 | 免费成人av在线看 | 午夜视频黄 | 色丁香久久 | 精品99视频| 一区二区三区中文字幕在线观看 | 国产网红在线观看 | 亚洲污视频 | 久久精品黄色 | 亚洲视频1 | 国产精品视频免费观看 | 日本久久精品 | 丁香电影小说免费视频观看 | 少妇精品久久久一区二区免费 | 在线一级片 | 在线观看日韩视频 | 欧美激情视频一二三区 | 婷婷丁香色| 99国产精品久久久久久久久久 | 91麻豆精品国产91久久久无限制版 | 国产精品大片在线观看 | 91传媒免费在线观看 | 久久欧美视频 | 欧美一级电影在线观看 | 亚洲一区二区三区毛片 | 久久欧美视频 | 成人在线免费小视频 | 国产亚洲成人网 | 手机av电影在线 | 98超碰在线| 亚洲在线a | 国产精品一区二区三区四区在线观看 | 在线观看中文字幕亚洲 | 97视频在线观看视频免费视频 | 一区电影 | 大片网站久久 | 色噜噜狠狠狠狠色综合久不 | 国产成人61精品免费看片 | 美女精品国产 | 国产成人333kkk | 久99久中文字幕在线 | 久久免费的视频 | 91中文在线 | 成人一级黄色片 | 国产中的精品av小宝探花 | 久久99精品波多结衣一区 | 亚洲 综合 国产 精品 | 深夜免费福利网站 | 在线观看国产区 | 999在线精品 | 最新av免费在线观看 | 在线激情影院一区 | 精品国产aⅴ一区二区三区 在线直播av | 国内精品久久久久影院日本资源 | www.天天草| 91在线永久 | 欧美激情第一页xxx 午夜性福利 | 在线免费国产 | 久草在线手机视频 | 国产福利精品一区二区 | 欧美日韩国产免费视频 | 99久久99久久 | 日本中文字幕在线观看 | 天天操天天干天天插 | 91av官网 | 亚洲伦理一区二区 | 久久一区国产 | 国产视频一区在线免费观看 | 中文字幕亚洲欧美日韩 | 中文字幕色网站 | 国产精品美女久久久久久免费 | av高清在线| 成人永久在线 | 精品欧美一区二区精品久久 | 热久久99这里有精品 | 婷婷在线视频 | 91精品免费视频 | 久久男人中文字幕资源站 | 日韩二区三区在线 | 欧美在线free | av成人亚洲| 中文字幕一区二区三区四区久久 | 97在线看片 | 欧美日韩精品在线 | 天天干天天搞天天射 | 精品自拍av | 97av影院| 亚洲狠狠| 日本最大色倩网站www | 久久三级视频 | 国产午夜精品一区二区三区嫩草 | 精品成人国产 | 在线电影 一区 | 色综合色综合久久综合频道88 | 国内精品久久天天躁人人爽 | 99亚洲精品视频 | 精品a级片 | 亚洲精品视频在线观看网站 | 91香蕉视频在线下载 | 久久99国产精品免费 | 国产精品igao视频网入口 | www.狠狠色| 在线观看中文字幕av | 日韩久久久久久久久 | 日韩中文字幕在线看 | 国产在线a免费观看 | 日日爽天天 | 久久久电影 | 久久免费视频1 | 免费精品视频 | 亚洲视频久久久 | 青青河边草免费观看 | 日韩av有码在线 | 亚洲精品66| 国产一区二区三区高清播放 | 91av欧美| 国产高清免费在线观看 | 成人avav | 国产精品黄 | 99精品免费在线 | 成人黄色中文字幕 | 手机看片 | 久久成人精品视频 | 成人高清av在线 | 久久久久久美女 | 日本中文字幕网站 | 成人资源网 | 中文字幕婷婷 | 免费高清看电视网站 | 国产精品精品国产色婷婷 | 欧美一级片免费在线观看 | 五月天中文字幕 | www国产一区 | 久草视频在线资源站 | 中文字幕在线专区 | 96看片 | 日日夜夜狠狠操 | 一级α片 | 国产日韩在线播放 | 亚洲精品免费视频 | 欧美性大战久久久久 | 亚洲欧美日本国产 | 丰满少妇久久久 | 97福利 | 狠狠狠综合 | 福利在线看片 | 黄色aaa级片 | 欧美日韩不卡一区二区三区 | 日韩免费在线网站 | 天天干天天干天天干天天干天天干天天干 | 日韩在线视频播放 | 欧美日韩三区二区 | 国产精品第54页 | 久久图 | 免费看色网站 | 免费网站黄 | 国产精品成人自产拍在线观看 | 久草在线观 | 黄色精品视频 | 中文字幕 影院 | 天天干天天干天天射 | 久久久香蕉视频 | 日韩1级片| 成人小视频在线观看免费 | 欧美在线a视频 | 色999视频| 久久免费福利视频 | 日韩在线影视 | 在线91播放 | 9ⅰ精品久久久久久久久中文字幕 | 91超国产 | 久久久久久福利 | 亚洲国产成人久久 | 激情五月***国产精品 | 九九九在线观看视频 | 日本精品xxxx | 亚州日韩中文字幕 | 五月婷婷免费 | 精品一区二区在线看 | 欧美久久久久久久 | 四虎在线影视 | 婷婷成人在线 | 久久久高清免费视频 | 最新av网址在线观看 | 午夜精品视频在线 | 国产精品原创 | 日韩av片无码一区二区不卡电影 | 超碰国产在线 | 91精品国产99久久久久久红楼 | 国内视频在线 | 黄色影院在线观看 | 欧美日本在线观看视频 | 午夜久久精品 | 一本—道久久a久久精品蜜桃 | 在线观看一 | 91成人国产| 久久久精品国产一区二区电影四季 | 国产成人精品一区二区三区 | 天天综合亚洲 | 精品福利视频在线 | 成人免费观看av | 免费视频在线观看网站 | 黄色a一级片 | 亚洲v欧美v国产v在线观看 | 玖玖精品在线 | 免费成人av在线 | 国产不卡免费av | 在线免费观看欧美日韩 | 久久69精品久久久久久久电影好 | 亚洲日韩欧美一区二区在线 | 国产成人综合在线观看 | 久草香蕉在线视频 | 日本三级中文字幕在线观看 | 99婷婷狠狠成为人免费视频 | 麻豆你懂的 | 欧美天天综合网 | 亚洲综合视频网 | 亚洲在线视频网站 | 亚洲成人家庭影院 | 色干干 | 国产一区二区三区久久久 | 天天夜夜狠狠操 | 天天射天天舔天天干 | 欧美成年黄网站色视频 | 黄色电影小说 | 成人精品久久久 | 婷五月天激情 | 国产精品18毛片一区二区 | 在线观看免费黄色 | 亚洲精品视频在线观看免费 | 国产精品第52页 | 一区二区三区在线免费观看视频 | 看全黄大色黄大片 | 国产精品亚洲综合久久 | 在线超碰av | 久草免费在线视频观看 | 最新国产在线 | 国产成人精品一区二三区 | 在线免费日韩 | 中文字幕精品www乱入免费视频 | 精品久操 | 在线观看av国产 | 91精品久久久久久综合乱菊 | www.99av| 黄色软件在线观看免费 | 久久伊人综合 | 成年人免费看片网站 | 久久视讯 | 日韩在线观看第一页 | 人人讲| 国产探花| 精品无人国产偷自产在线 | 91av视屏| 国产精品免费久久久 | 2018亚洲男人天堂 | 久久久久久久毛片 | 国产精品亚州 | 99热国产在线 | av在线网站观看 | 欧美乱熟臀69xxxxxx | 精品96久久久久久中文字幕无 | 国产精品久久久久久久妇 | 操操操人人人 | 国产一在线精品一区在线观看 | 五月天av在线 | 在线a人v观看视频 | 国产香蕉97碰碰碰视频在线观看 | 五月香视频在线观看 | 97手机电影网 | 久久亚洲综合国产精品99麻豆的功能介绍 | 中文av资源站 | 亚洲一区日韩精品 | 亚洲精品久 | 99久久精品一区二区成人 | 五月花激情 | 在线综合 亚洲 欧美在线视频 | 一区二区三区电影 | 成人一区二区三区在线观看 | 天天天天综合 | 成人久久毛片 | 久久成人免费电影 | 狠狠躁日日躁狂躁夜夜躁av | 超碰在线人 | 黄色亚洲大片免费在线观看 | 男女激情麻豆 | 国产精品系列在线观看 | 久久av中文字幕片 | 日韩动态视频 | 国产亚洲午夜高清国产拍精品 | 五月婷婷.com | 亚洲欧美国产精品久久久久 | 日韩欧美一区二区三区在线观看 | 999在线精品 | 久久国产片 | 亚洲国产理论片 | 日韩欧美区 | 欧美日韩电影在线播放 | 美女视频黄是免费的 | 国产一区二区三区免费在线 | 韩国精品在线 | 91麻豆产精品久久久久久 | 91精品啪啪 | 亚洲成人软件 | 毛片一级免费一级 | 亚洲午夜精品久久久久久久久 | 国产精品 亚洲精品 | 日日操天天射 | 亚洲欧美乱综合图片区小说区 | 日韩大片免费观看 | 日日操网| 久久这里精品视频 | 婷婷色社区 | 中文字幕国产 | 99视频网址 | 久久亚洲影视 | 97在线超碰 | 麻豆成人在线观看 | 国产精品成人av在线 | 国产人成一区二区三区影院 | 久久婷婷视频 | 成人资源站 | 五月综合激情婷婷 | 射射射av | www免费在线观看 | 亚洲在线视频网站 | 99精品免费网 | 日韩高清一区 | 成人久久久精品国产乱码一区二区 | 国产亚洲精品bv在线观看 | 精品亚洲欧美无人区乱码 | 欧美va天堂va视频va在线 | 福利电影一区二区 | 中文字幕在线观看亚洲 | 在线视频欧美精品 | 久久久一本精品99久久精品66 | 免费午夜网站 | 国产99久久精品一区二区永久免费 | 国产精品成人一区二区 | 亚洲激情小视频 | 婷婷色综合网 | 国产伦理剧| 97精品国产97久久久久久免费 | 亚洲在线网址 | 久久艹国产视频 | 午夜精品电影一区二区在线 | 国产精品中文字幕在线播放 | 99免费视频| 亚洲精品短视频 | 欧美日韩高清免费 | 欧美日韩在线电影 | 操操操影院 | 韩国三级av在线 | 色综合夜色一区 | 一级片视频在线 | 中日韩欧美精彩视频 | 国产伦精品一区二区三区照片91 | 成年人黄色免费看 | 欧美另类69 | 97av视频| 五月天天色 | 在线观看视频在线 | 2021国产在线视频 | 激情av在线播放 | 美女av免费| 91豆花在线观看 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 亚洲dvd| 99色婷婷| 日本天天色 | 欧美亚洲成人免费 | 国产日韩欧美在线影视 | 超碰97国产在线 | 999视频在线观看 | 99久久精品国产亚洲 | 国产视频欧美视频 | 青青看片 | 亚洲午夜av电影 | 国产一区二区免费看 | 国产字幕av | 黄色av高清 | 成人一级免费视频 | 国产中文字幕网 | 丝袜美腿一区 | 五月婷婷激情综合网 | 全黄网站 | 九九久久视频 | 欧美在线资源 | 久久久久久久久久久久久影院 | 正在播放国产精品 | 91资源在线 | 91网址在线看| 国产一级二级在线播放 | 91av国产视频| 亚洲天堂自拍视频 | 在线观看中文字幕网站 | 天天干天天操av | 国产一区二区三区 在线 | 色资源在线观看 | 国产专区一| 在线免费观看国产 | 天天综合导航 | 在线看国产一区 | 91久草视频| 91香蕉国产在线观看软件 | 久久超碰在线 | 色婷婷www| 成人一级免费视频 | 一本到视频在线观看 | 日韩在线观看中文字幕 | 爱av在线网| 久久综合福利 | 欧美成人黄色片 | 免费国产一区二区 | 91成人黄色| 美女视频黄频大全免费 | 日韩激情影院 | www视频在线免费观看 | 日韩91在线 | 国产精品一区二区三区电影 | 欧美久久久| 欧美精品v国产精品 | 国产美女精品久久久 | 国产成人一区二区三区影院在线 | 日韩欧美在线高清 | 看毛片网站| 成年人视频在线 | 久久久麻豆精品一区二区 | 国产精品久久嫩一区二区免费 | 涩涩网站在线观看 | 国产视频1区2区3区 久久夜视频 | 成年人在线电影 | 色综合久久天天 | av丝袜天堂 | 欧美日韩破处 | 在线观看片 | 亚洲综合色丁香婷婷六月图片 | 狠狠狠干| 亚洲第一香蕉视频 | 一区二区中文字幕在线播放 | 亚洲国产久 | 亚洲女在线 | 99久热在线精品视频成人一区 | 成年人国产视频 | 干干操操 | 免费视频 三区 | 国内亚洲精品 | 国产一性一爱一乱一交 | 国内久久久久久 | 麻豆观看| 中文字幕色网站 | 日韩精品 在线视频 | 国产精品成人a免费观看 | 久久女教师| 91最新地址永久入口 | 伊人看片 | 人人cao| 国产香蕉久久精品综合网 | 久久成人精品电影 | 在线之家免费在线观看电影 | 91男人影院| 在线观看v片 | 欧美午夜理伦三级在线观看 | 国产精品久久久毛片 | 色 免费观看 | 欧洲av不卡 | 91精选| 四虎影视成人精品国库在线观看 | 亚洲色图美腿丝袜 | 日韩黄色一级电影 | 91精品婷婷国产综合久久蝌蚪 | 免费亚洲一区二区 | 欧美老少交 | 国产玖玖精品视频 | www.黄色片.com| 五月天久久久久 | 99久久9 | 波多野结衣在线观看一区 | 2019免费中文字幕 | 国产成人免费观看 | 91视频成人免费 | 国产精品九九九九九九 | 久久你懂的 | av网在线观看 | 99久久99| 在线视频欧美精品 | 色网站在线 | 小草av在线播放 | 日韩欧美国产激情在线播放 | 久久精品电影院 | 97超级碰碰碰视频在线观看 | 国产视频资源 | 又黄又刺激视频 | 久久久精品一区二区三区 | 丝袜美腿亚洲综合 | 黄色一级免费 | 九九久久久久久久久激情 | 国产又粗又硬又爽的视频 | 国内成人综合 | 久草电影免费在线观看 | 欧美伦理电影一区二区 | 亚洲一区 影院 | 久久精品牌麻豆国产大山 | 日韩高清不卡一区二区三区 | 高清有码中文字幕 | 在线观看精品一区 | 日韩国产精品久久 | 中文字幕中文字幕在线中文字幕三区 | 午夜性色| av在线短片 | 91视频久久久久久 | 中日韩免费视频 | 中文字幕高清 | 国产91精品看黄网站在线观看动漫 | 国产成人久久精品77777综合 | 九九九电影免费看 | 国产丝袜网站 | 99精品视频在线播放观看 | 国产又粗又长的视频 | 欧美成人影音 | 99中文字幕在线观看 | 中文字幕资源站 | 国产免费视频在线 | 精品成人网 | 国产精品免费视频久久久 | 天天精品视频 | 精品产品国产在线不卡 | 婷婷在线视频 | 欧美a级成人淫片免费看 | 精品国内自产拍在线观看视频 | 一区二区影院 | 久久久久久久久久久久久久av | 久久精品精品电影网 | 在线国产中文字幕 | 免费的黄色av | 亚洲免费观看视频 | 9在线观看免费高清完整版 玖玖爱免费视频 |