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

如何在我們的Asp.NET Core應用程序中使用ElasticSearch高級功能

開發 后端
在本文中,我向您展示了如何使用Elasticsearch對復雜的實際場景進行有效的處理,分析和搜索數據。希望我對這個話題感興趣。

[[432709]]

在上一篇文章中[1],我們討論了將ElasticSearch用作簡單的全文本搜索引擎,如何快速安裝和配置它以及如何將其集成到我們的.NET Web應用程序中。

今天,我們仍然要在電子商務網站中向您展示如何使用ElasticSearch的許多功能來改善搜索。

我們使用了沒有嵌套類的平面Product類來輕松管理搜索,但是這種方法有很多限制。然后,我們引入了一個新的數據模型,以便任何對象都是要建模的實體。一個文檔可以包含無限數量的相關字段和值(數組,簡單和復雜類型),并保存為JSON文檔。

我們的模型產品類別已變為:

  1. public class Product 
  2.     public int Id { get; set; } 
  3.     public string Ean { get; set; } 
  4.     public string Name { get; set; } 
  5.     public string Description { get; set; } 
  6.     public Brand Brand { get; set; } 
  7.     public Category Category { get; set; } 
  8.     public Store Store { get; set; } 
  9.     public decimal Price { get; set; } 
  10.     public string Currency { get; set; } 
  11.     public int Quantity { get; set; } 
  12.     public float Rating { get; set; } 
  13.     public DateTime ReleaseDate { get; set; } 
  14.     public string Image { get; set; } 
  15.     public List<Review> Reviews { get; set; } 

其中品牌,類別,商店評論和用戶類別分別是:

  1. public class Brand 
  2.     public int Id { get; set; } 
  3.     public string Name { get; set; } 
  4.     public string Description { get; set; } 
  5.  
  6. public class Category 
  7.     public int Id { get; set; } 
  8.     public string Name { get; set; } 
  9.     public string Description { get; set; } 
  10.  
  11. public class Store 
  12.     public int Id { get; set; } 
  13.     public string Name { get; set; } 
  14.     public string Description { get; set; } 
  15.  
  16. public class Review 
  17.     public int Id { get; set; } 
  18.     public short Rating { get; set; } 
  19.     public string Description { get; set; } 
  20.     public User User { get; set; } 
  21.  
  22. public class User 
  23.     public int Id { get; set; } 
  24.     public string FirstName { get; set; } 
  25.     public string LastName { get; set; } 
  26.     public string IPAddress { get; set; } 
  27.     public GeoIp GeoIp { get; set; } 

GeoIp是NEST庫中用于地理數據的類。產品索引已被簡單地命名為產品。我們以這種方式創建和配置了它:

  1. client.Indices.Create(“products”, index => index 
  2.     .Map<Product>(x => x.AutoMap()) 
  3.     .Map<Brand>(x => x.AutoMap()) 
  4.     .Map<Category>(x => x.AutoMap()) 
  5.     .Map<Store>(x => x.AutoMap()) 
  6.     .Map<Review>(x => x.AutoMap()) 
  7.     .Map<User>(x => x.AutoMap() 
  8.         .Properties(props => props 
  9.             .Keyword(t => t.Name("fullname")) 
  10.             .Ip(t => t.Name(dv => dv.IPAddress)) 
  11.             .Object<GeoIp>(t => t.Name(dv => dv.GeoIp)) 
  12.         ) 
  13.     ) 

我們專門為ElasticSearch索引創建一個名為fullname的新屬性,用于名為fullname的User類,并定義了將要處理的地理信息。 為了使我們的產品能夠在索引之前進行處理,一種有用的方法是node.ingest,即進行文檔預處理的節點。接收節點攔截所有索引請求,甚至是批量索引請求,并將所有定義的轉換應用于其內容,然后將文檔發還給索引API。

必須通過以下參數在配置文件elasticsearch.yml中。

啟用node.ingest:

  1. node.ingest: true 

在我們的示例中,我們使用相同的節點進行搜索和攝取,我們不需要編寫代碼來管理攝取節點,但是,如果我們要擁有一組專用的攝取節點,則必須配置ElasticSearch客戶如下:

  1. var pool = new StaticConnectionPool(new []  
  2.     new Uri("http://ingestnode1:9200"), 
  3.     new Uri("http://ingestnode2:9200"), 
  4.     new Uri("http://ingestnode3:9200"
  5. }); 
  6. var settings = new ConnectionSettings(pool); 
  7. var client = new ElasticClient(settings); 

為了對文檔進行預處理,需要在建立索引之前定義一個管道,該管道指定一組能夠轉換該文檔的過程。有許多默認過程可供使用。例如:GeoIP從IP地址獲取地理信息,JSON將字符串轉換為JSON對象,小寫和大寫,Drop刪除與某些參數匹配的文檔。您也可以創建自定義過程。我們在項目中使用的管道是:

  1. client.Ingest.PutPipeline("product-pipeline", p => p 
  2.                 .Processors(ps => ps 
  3.                     .Uppercase<Brand>(s => s 
  4.                         .Field(t => t.Name
  5.                     ) 
  6.                     .Uppercase<Category>(s => s 
  7.                         .Field(t => t.Name
  8.                     ) 
  9.                     .Set<User>(s => s.Field("fullname"
  10.                         .Value(s.Field(f => f.FirstName) + " " +  
  11.                              s.Field(f => f.LastName))) 
  12.                     .GeoIp<User>(s => s 
  13.                         .Field(i => i.IPAddress) 
  14.                         .TargetField(i => i.GeoIp) 
  15.                     ) 
  16.                 ) 
  17.             ); 

該管道處理文檔,以便:

  • Brand.Name和Category.Name將通過大寫輸入以大寫形式索引;
  • User.fullname將包含名字和姓氏(設置攝取);
  • User.IPAddress將成為地理定位的地理地址(GeoIp提取)。

管道以ElasticSearch集群狀態保存,要使用它們,您必須在索引請求中指定管道參數,以便攝取節點知道必須使用哪個管道:

  1. client.Bulk(b => b 
  2.     .Index("products"
  3.     .Pipeline("product-pipeline"
  4.     .Timeout("5m")  
  5.     .Index<Person>(/*snip*/) 
  6.     .Index<Person>(/*snip*/) 
  7.     .Index<Person>(/*snip*/) 
  8.     .RequestConfiguration(rc => rc 
  9.         .RequestTimeout(TimeSpan.FromMinutes(5))  
  10.     ) 
  11. ); 

通過這種方式,我們定義了索引編制過程,以便我們可以根據需要獲取文檔清單。在使用創建的管道為文檔建立索引之后,我們可以通過使用瀏覽器http:// localhost:9200 / products / _search進行訪問來檢查它們。我們得到類似于以下結果:

如上一篇文章所述,搜索過程基于文檔分析。這是第一個階段的令牌化過程(將文本分成小塊,稱為令牌),另一個是規范化過程(它允許您查找與不等于搜索詞但足夠相似以至于相關的令牌的匹配項)為搜索建立索引的文本。分析儀執行此過程。

分析儀由三個主要部分組成:

1.0個或多個字符過濾器

2.1個分詞器

3.0個或多個令牌過濾器

有一些默認的分析器可以使用,但是,為了根據我們的要求提高搜索的準確性,我們創建了一個自定義分析器。

定制分析器使我們能夠在分析過程中控制令牌化之前對文檔的任何更改,如何將其轉換為令牌以及如何對其進行規范化。

這是我們的自定義分析器:

  1. var an = new CustomAnalyzer(); 
  2. an.CharFilter = new List<string>(); 
  3. an.CharFilter.Add("html_strip"); 
  4. an.Tokenizer = "edgeNGram"
  5. an.Filter = new List<string>(); 
  6. an.Filter.Add("standard"); 
  7. an.Filter.Add("lowercase"); 
  8. an.Filter.Add("stop"); 
  9.  
  10. settings.Analysis.Tokenizers.Add("edgeNGram", new Nest.EdgeNGramTokenizer 
  11.     MaxGram = 15, 
  12.     MinGram = 3 
  13. }); 
  14.  
  15. settings.Analysis.Analyzers.Add("product-analyzer", an); 

我們的分析器使用標準的標記化方法,創建3至15個字符的小寫標記。我們可以將分析器添加到一個或多個字段的索引中,也可以將其添加為標準分析器。

  1. client.CreateIndex("products", c => c 
  2.     // Analyzer added only for the property Description of Product 
  3.     .AddMapping<Product>(e => e 
  4.         .MapFromAttributes() 
  5.         .Properties(p => p.String(s => s.Name(f => f.Description) 
  6.         .Analyzer("product-analyzer"))) 
  7.     ) 
  8.     //Analyzer added as default 
  9.         .Analysis(analysis => analysis 
  10.             .Analyzers(a => a 
  11.             .Add("default", an) 
  12.         ) 
  13.     ) 

創建自定義分析器時,可以使用測試API對其進行測試。即使對于默認分析儀,也可以執行這些測試。

  1. var analyzeResponse = client.Indices.Analyze(a => a 
  2.     .Tokenizer("standard"
  3.     .Filter("lowercase""stop"
  4.     .Text("Lorem ipsum dolor sit amet, consectetur..."
  5. ); 

我們還可以使用數據聚合來提供通過搜索查詢聚合的數據,它基于可以組成以獲得復雜聚合的簡單塊。聚合有不同類型,每種類型都有定義的范圍和輸出。它們可以分為:

  • 桶裝:具有關鍵和標準的容器;
  • 指標:根據一組文檔計算的指標;
  • 矩陣:在不同文檔字段上進行的一系列操作,以矩陣樣式生成數據;
  • 管道:更多聚合的聚合。

在我們的案例中,我們使用匯總來獲取品牌,類別,價格范圍的產品數量。在以下示例中,我們找到了產品價格的匯總:

  1. s => s 
  2.     .Query(...) 
  3.     .Aggregations(aggs => aggs 
  4.         .Average("average_price"avg => avg.Field(p => p.Price)) 
  5.         .Max("max_price"avg => avg.Field(p => p.Price)) 
  6.         .Min("min_price"avg => avg.Field(p => p.Price)) 
  7.     ) 

另一個有用的聚合是根據品牌,商店或類別進行分組:

  1. s => s 
  2.      .Query(...) 
  3.      .Aggregations(aggs => aggs 
  4.          .ValueCount("products_for_category"avg => avg.Field(p => p.Category.Name)) 
  5.          .ValueCount("products_for_brand"avg => avg.Field(p => p.Brand.Name)) 
  6.          .ValueCount("products_for_store"avg => avg.Field(p => p.Store.Name)) 
  7.      ) 

這樣,我們可以實時獲取針對類別,品牌和商店的搜索產品數量。匯總數據還可以用于創建儀表板,甚至可以使用動態過濾器(類似于電子商務)來組織搜索,并且顯然可以用于統計目的。

改善您的搜索

如您所知,我們對任何搜索結果都有分數。等級是從0到1的數字,它確定搜索參數如何接近該結果。得分主要取決于三個參數:搜索詞的頻率,倒排文檔的頻率和字段長度。

要從得分中排除得分過低的人,我們可以使用MinScore:

  1. s => s 
  2.      .MinScore(0.5) 
  3.      .Query(...) 

這樣,我們可以排除分數低于0.5的所有結果。建議者允許您使用與搜索文本相似的術語來搜索ElasticSearch索引。例如,完成建議器對于自動完成很有用,它會在鍵入文本時引導您獲得最佳和更相關的結果。該完成建議程序經過優化,可以盡快返回結果,但是它使用啟用了快速查找的結構并需要資源。

在我們的案例中,我們實現了基于產品名稱的自動完成方法,該方法將在搜索框中鍵入以下內容時被調用:

  1. s => s 
  2.     .Query(...) 
  3.     .Suggest(su => su 
  4.         .Completion("name", cs => cs 
  5.             .Field(f => f.Name
  6.             .Fuzzy(f => f 
  7.                 .Fuzziness(Fuzziness.Auto) 
  8.             ) 
  9.             .Size(5) 
  10.         ) 
  11.     ) 

更好的搜索的另一有用方法是索引boost。當您搜索更多索引時,可以為這些索引分配一個乘數,這樣一來,一個索引的結果將比另一個顯示更多。您可以將其用于商業目的,與供應商達成協議或使我們的產品脫穎而出。索引提升的一個示例是:

  1. s => s 
  2.     .Query(...) 
  3.     .IndicesBoost(b => b 
  4.         .Add("products-1", 1.5) 
  5.         .Add("products-2", 1) 
  6.     ) 

在此示例中,我們將乘數1.5乘以1的結果,乘以1乘以2的結果,這樣乘積1的結果將被更頻繁地顯示。改進搜索的另一種方法是通過一些參數對它們進行排序。就我們而言,我們可以:

  1. s => s 
  2.     .Query() 
  3.     .Sort(ss => ss 
  4.         .Descending(SortSpecialField.Score) 
  5.         .Descending(p => p.Price) 
  6.         .Descending(p => p.ReleaseDate) 
  7.         .Ascending(SortSpecialField.DocumentIndexOrder) 
  8.     ) 

我們將評分,價格,發布日期以及最終索引順序設置為更高的優先級。

運行項目

我們的示例項目是一個.NET Core MVC WebApi應用程序,該應用程序提供一個搜索框和一個儀表板,其中的儀表板會根據鍵入的文本自動刷新數據。首次運行項目時,我們可以加載由Bogus插件創建的n個Product對象。還有其他偽造類可以為品牌,類別,商店,評論和用戶構建隨機對象。它允許您擁有一個數據庫來執行我們的搜索。

  1. var productFaker = new Faker<Product>() 
  2.     .CustomInstantiator(f => new Product()) 
  3.         .RuleFor(p => p.Id, f => f.IndexFaker) 
  4.         .RuleFor(p => p.Ean, f => f.Commerce.Ean13()) 
  5.         .RuleFor(p => p.Name, f => f.Commerce.ProductName()) 
  6.         .RuleFor(p => p.Description, f => f.Lorem.Sentence(f.Random.Int(5, 20))) 
  7.         .RuleFor(p => p.Brand, f => f.PickRandom(brands)) 
  8.         .RuleFor(p => p.Category, f => f.PickRandom(categories)) 
  9.         .RuleFor(p => p.Store, f => f.PickRandom(stores)) 
  10.         .RuleFor(p => p.Price, f => f.Finance.Amount(1, 1000, 2)) 
  11.         .RuleFor(p => p.Currency, "€"
  12.         .RuleFor(p => p.Quantity, f => f.Random.Int(0, 1000)) 
  13.         .RuleFor(p => p.Rating, f => f.Random.Float(0, 1)) 
  14.         .RuleFor(p => p.ReleaseDate, f => f.Date.Past(2)) 
  15.         .RuleFor(p => p.Image, f => f.Image.PicsumUrl()) 
  16.         .RuleFor(p => p.Reviews, f => reviewFaker.Generate(f.Random.Int(0, 1000)) 
  17.     ) 

在頁面中間,有一個儀表板,我們在其中使用了本文介紹的過濾器,分析器和方法。在頂部的搜索框中鍵入一些文本時,將建議相關產品,并且儀表板內容將根據搜索文本進行更新。

結論

在本文中,我向您展示了如何使用Elasticsearch對復雜的實際場景進行有效的處理,分析和搜索數據。希望我對這個話題感興趣。

此處[2]提供了[3]帶有本文中使用的代碼的示例項目。

References

[1] 一篇文章中: https://www.blexin.com/en-US/Article/Blog/How-to-integrate-ElasticSearch-in-ASPNET-Core-70

[2] 此處: https://github.com/enricobencivenga/ProductElasticSearchAdvanced 

[3] 了: https://github.com/enricobencivenga/ProductElasticSearchAdvanced

 

責任編輯:武曉燕 來源: DotNET技術圈
相關推薦

2009-03-30 10:34:03

ASP.NETMySQL

2021-01-04 05:44:54

框架日志

2021-02-06 21:40:13

SignalR通訊TypeScript

2021-03-17 09:45:31

LazyCacheWindows

2021-02-02 16:19:08

Serilog日志框架

2021-01-31 22:56:50

FromServiceASP

2021-02-28 20:56:37

NCache緩存框架

2021-03-10 09:40:43

LamarASP容器

2021-02-03 13:35:25

ASPweb程序

2021-01-28 22:39:35

LoggerMessa開源框架

2021-01-07 07:39:07

工具接口 Swagger

2021-03-03 22:37:16

MediatR中介者模式

2017-04-21 12:03:46

MacASP.NET Cor程序

2021-02-07 17:29:04

監視文件接口

2021-11-01 14:52:38

ElasticSear索引SQL

2021-06-22 16:59:56

微軟.NETC# 軟件開發

2021-01-26 14:57:00

中間件應用模塊化

2021-04-12 07:03:10

輕量級模塊化框架

2013-03-25 10:38:24

ASP.NETHttpModule

2012-03-07 09:08:00

HTML 5
點贊
收藏

51CTO技術棧公眾號

国产精品福利在线观看播放| 精品精品导航| 国内成人免费视频| 欧美国产一区二区三区| 中文字幕丰满孑伦无码专区| 国产精品.xx视频.xxtv| 亚洲国产综合人成综合网站| 欧美成人bangbros| 国产又爽又黄的激情精品视频| 欧美成人综合色| 国产欧美日韩免费观看| 欧美一区二区三区公司| 91传媒久久久| 人妖欧美1区| 亚洲国产精品99久久久久久久久| 99久久久精品免费观看国产| 亚洲天堂五月天| 欧美日韩免费观看一区=区三区| 亚洲人成在线观看| 四虎成人免费视频| 日日夜夜精品| 在线一区二区三区四区| www.成年人视频| 九色porny在线| 久久综合99re88久久爱| 亚洲尤物在线视频观看| 日本精品va在线观看| 欧美做爰啪啪xxxⅹ性| 亚洲免费毛片| 亚洲第五色综合网| 日本中文字幕精品—区二区| 电影一区二区三区| 亚洲不卡在线观看| 欧美美女黄色网| 成人直播在线| 国产精品久久国产精麻豆99网站| 久久综合九九| 日韩中文字幕观看| 国产剧情一区二区| 国产日韩在线视频| 伊人成人在线观看| 日韩精品电影在线| 日av在线播放中文不卡| 黄色片视频网站| 伊人久久大香线蕉av超碰演员| 欧美wwwxxxx| 看免费黄色录像| 羞羞色午夜精品一区二区三区| 亚洲午夜色婷婷在线| 久操视频免费看| 欧美亚洲色图校园春色| 日韩av在线一区二区| 中国极品少妇videossexhd| 九九九九九九精品任你躁| 777午夜精品视频在线播放| 999在线观看| 免费视频成人| 欧美一区二区三区影视| 久久精品无码一区二区三区毛片| 精品视频一区二区三区在线观看 | www.国产成人| 精品电影一区| 91黄色8090| 亚洲影院在线播放| 久久性天堂网| 国产欧美 在线欧美| 国产一区二区在线播放视频| 亚洲国产中文字幕在线| 亚洲影院在线| 国产精品久久久久久久久男| 中文字幕久久久久| 久久精品国产久精国产爱| 91精品久久久久久久久久久久久久| 中文字幕欧美色图| 国产一区二区不卡在线| 成人羞羞视频免费| 日韩一二三四| 中文字幕乱码一区二区免费| 一区二区三区欧美成人| 日本精品600av| 精品久久在线播放| 天天色综合天天色| 网站一区二区| 亚洲欧美日韩区| www深夜成人a√在线| 禁久久精品乱码| 国产精品电影观看| 国产偷拍一区二区| 91色综合久久久久婷婷| 亚洲一区二区三区色| 成人女同在线观看| 在线观看国产精品网站| 亚洲综合在线一区二区| 日本午夜精品久久久| 搡老女人一区二区三区视频tv| 国产大学生自拍| 免费日韩视频| 97操在线视频| 国产日韩精品在线看| 亚洲精品中文在线影院| 18岁视频在线观看| 久久精品一级| 亚洲欧美中文日韩在线| 欧美视频www| 久久午夜精品一区二区| 99中文视频在线| 国产精品秘入口| 夜夜嗨av一区二区三区中文字幕 | 91午夜精品亚洲一区二区三区| 看电视剧不卡顿的网站| 精品一区2区三区| a级网站在线播放| 91久久精品午夜一区二区| 无码人妻丰满熟妇区毛片蜜桃精品| 神马电影久久| 国内揄拍国内精品少妇国语| 国产精品九九九九| 色综合天天色| 色94色欧美sute亚洲线路一ni| 成人三级做爰av| 国产精品成人一区二区不卡| 日韩av电影在线免费播放| 理论片中文字幕| 亚洲欧洲www| 欧美成年人视频在线观看| 日韩av黄色在线| 欧美国产欧美亚洲国产日韩mv天天看完整 | 日本精品久久久| 狠狠综合久久av一区二区| 中文字幕佐山爱一区二区免费| 午夜免费一区二区| 杨幂一区二区三区免费看视频| 国模精品系列视频| 精品人妻少妇嫩草av无码专区| 国产精品福利在线播放| 日韩中文字幕免费在线| 久草在线成人| 国产不卡一区二区在线播放| 凸凹人妻人人澡人人添| 激情小说亚洲色图| 日韩电影在线观看永久视频免费网站| 黄色一级视频免费观看| 狠狠网亚洲精品| 椎名由奈jux491在线播放| 精品福利在线| 久久好看免费视频| 国产日产亚洲系列最新| 亚洲日本青草视频在线怡红院| www.国产视频.com| 一本精品一区二区三区| 91一区二区三区| 国产精品69xx| 精品爽片免费看久久| 国产精品黄色大片| 国产欧美日韩在线视频| 在线看的黄色网址| 91亚洲国产| 亚洲伊人第一页| 日本精品600av| 亚洲福利在线观看| 在线精品免费视| 欧美激情在线一区二区| 手机免费看av网站| 欧美99在线视频观看| av在线亚洲男人的天堂| 国产三级日本三级在线播放| 精品久久久久久久久久岛国gif| 欧美成人全部免费| 噜噜噜久久,亚洲精品国产品| 亚洲成av人片www| 成年人免费观看视频网站| 肉色丝袜一区二区| 中文字幕在线乱| 国产精品中文字幕制服诱惑| 国产suv精品一区二区三区88区| 成人激情电影在线看| 911精品国产一区二区在线| 美女视频黄免费| 久久综合久色欧美综合狠狠| 乌克兰美女av| 亚洲视频一区| 亚洲国产欧洲综合997久久 | 日韩精品一二三四| 在线播放 亚洲| 久草精品视频| 国产精品免费福利| 超清av在线| 中文字幕av一区二区| av在线资源观看| 色综合天天综合网天天看片| www.av免费| 91在线观看污| 色18美女社区| 亚洲专区一区二区三区| 国产精品99久久久久久大便| 欧美日韩导航| 91久久国产精品91久久性色| 欧美三级网站| 欧美成人午夜激情视频| 国产黄色在线| 亚洲成在人线av| 国产一区二区三区三州| 色综合av在线| 国产在线综合网| 国产精品福利影院| 久久精品国产亚洲av麻豆| 国产毛片精品一区| 男女男精品视频站| 99精品福利视频| 欧美亚洲视频一区| 欧美日韩国产免费观看视频| 极品日韩久久| 亚洲综合色婷婷在线观看| 国产日韩精品电影| 成人在线爆射| 2018国产精品视频| wwwww亚洲| 亚洲第一精品影视| 日韩精品国内| 香蕉久久夜色精品国产使用方法 | www.爱爱.com| 欧美日本精品一区二区三区| 无码人妻丰满熟妇精品| 婷婷丁香激情综合| 国产一二三四在线| 一区二区三区精品| 污污的视频在线免费观看| 欧美国产日韩亚洲一区| 真人bbbbbbbbb毛片| 国产福利电影一区二区三区| 在线能看的av网站| 毛片av一区二区| 天天视频天天爽| 日本人妖一区二区| 三级a在线观看| 日韩高清国产一区在线| 狠狠操精品视频| 日韩黄色免费电影| 日本成人在线免费视频| 午夜一级久久| 成年人免费大片| 免费看黄裸体一级大秀欧美| 成人黄色片视频| 爽爽淫人综合网网站| 日本熟妇人妻xxxxx| 久久久久国产一区二区| 国产情侣av自拍| 秋霞电影网一区二区| 亚洲欧美日本一区二区三区| 激情偷乱视频一区二区三区| 在线观看日本www| 国产成人综合网| 亚洲欧美日韩色| 不卡电影一区二区三区| www.自拍偷拍| 国产亚洲精品中文字幕| 青青草自拍偷拍| 亚洲人成网站在线| 久久久国产精华液| 欧美日韩国产一区二区| 色老头一区二区| 欧美日韩国产a| 国产人妖一区二区| 亚洲精品国产美女| 国产h在线观看| 欧美精品在线免费播放| 岛国毛片av在线| 日本韩国欧美精品大片卡二| 久久91视频| 国产精品二区三区| 日韩av网址大全| 亚洲精品成人久久久998| 91精品福利| 国产网站免费在线观看| 免费a级在线播放| 亚洲精品电影久久久| 番号集在线观看| 久久av中文字幕| 少妇淫片在线影院| 成人日韩av在线| 成人搞黄视频| 日本免费高清一区二区| 综合久久婷婷| 无码无遮挡又大又爽又黄的视频| 久久精品国产免费看久久精品| 毛茸茸free性熟hd| 欧美韩国日本不卡| 日本少妇性生活| 欧美日韩国产区一| 天堂成人在线| 超碰精品一区二区三区乱码| 少妇在线看www| 99re视频在线| 成人免费在线观看av| 美脚丝袜脚交一区二区| 蜜臀久久99精品久久久久久9| 蜜臀aⅴ国产精品久久久国产老师 性活交片大全免费看 | 亚洲一区二区三区四区五区黄 | 国产在线拍揄自揄拍| 欧美性大战久久| 三级视频在线看| 久久国产精品久久久| 亚洲a∨精品一区二区三区导航| 波多野结衣久草一区| 色狮一区二区三区四区视频| 国产91xxx| 国产成人三级在线观看| 美国一级黄色录像| 欧美视频在线观看免费| 亚洲成人777777| 精品国产一区二区在线| 第84页国产精品| 狠狠久久综合婷婷不卡| 欧美黄色aaaa| 激情图片中文字幕| 欧美国产日产图区| 国产午夜麻豆影院在线观看| 亚洲高清在线观看| 日本动漫同人动漫在线观看| 国产精品亚洲一区二区三区| 一区二区美女| 18禁网站免费无遮挡无码中文| 国产一区不卡视频| www.5588.com毛片| 欧美日本精品一区二区三区| 粉嫩av一区| 国产精品老女人视频| 九九精品久久| 亚洲爆乳无码专区| 久久综合久久综合久久综合| aaa人片在线| 日韩成人性视频| 超碰在线视屏| 久久精品视频一区| 东方av正在进入| 在线综合视频播放| 久草免费在线观看| 91精品中国老女人| 亚洲精品国产成人影院| 亚洲午夜激情影院| 最新热久久免费视频| 国产精品热久久| 久久成人亚洲精品| 久久久精品区| 美女黄色免费看| 夫妻av一区二区| 久久久久久久9999| 亚洲国产精彩中文乱码av| av资源在线播放| 久久精彩视频| 日本成人在线不卡视频| 长河落日免费高清观看| 欧美日韩国产成人在线免费| 国产区在线看| 成人在线观看网址| 国产精品久久久久久久久久妞妞| 亚洲欧美日本一区| 色屁屁一区二区| 日本在线视频网| 99re在线国产| 亚洲一区视频| www.涩涩爱| 日韩一区二区三区视频在线观看| 久久99亚洲网美利坚合众国| 久久久久久九九九九| 日本va欧美va精品发布| 亚洲综合视频网站| 精品久久久三级丝袜| 伊人久久综合一区二区| 亚洲成色最大综合在线| 国产另类ts人妖一区二区| 国产手机在线视频| 在线视频欧美日韩精品| 日韩免费成人| 干日本少妇首页| 国产精品久久久久久亚洲伦| 亚洲av少妇一区二区在线观看| 97色在线视频观看| 日韩一区电影| 成人区人妻精品一区二| 欧美综合视频在线观看| 性直播体位视频在线观看| 欧美激情专区| 国产精品一区二区无线| 亚洲午夜18毛片在线看| 久久精品国产精品亚洲| 亚洲人成网站77777在线观看| 亚洲xxx在线观看| 亚洲夂夂婷婷色拍ww47 | 大胆欧美人体视频| 亚洲福利网站| 巨乳女教师的诱惑| 在线观看亚洲成人| 里番在线播放| 伊人色综合影院| 26uuu国产日韩综合| 99精品免费观看| 国产精品扒开腿做| 国产综合欧美| 国产黄a三级三级|