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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

搜索过滤(乐优)

發布時間:2024/3/12 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 搜索过滤(乐优) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 了解過濾功能的基本思路
  • 實現分類和品牌展示
  • 了解規格參數展示
  • 實現過濾條件篩選
  • 實現已選過濾項回顯
  • 實現取消選擇過濾項

1.過濾功能分析

首先看下頁面要實現的效果:

整個過濾部分有3塊:

  • 頂部的導航,已經選擇的過濾條件展示:
    • 商品分類面包屑,根據用戶選擇的商品分類變化
    • 其它已選擇過濾參數
  • 過濾條件展示,又包含3部分
    • 商品分類展示
    • 品牌展示
    • 其它規格參數
  • 展開或收起的過濾條件的按鈕

頂部導航要展示的內容跟用戶選擇的過濾條件有關。

  • 比如用戶選擇了某個商品分類,則面包屑中才會展示具體的分類
  • 比如用戶選擇了某個品牌,列表中才會有品牌信息。

所以,這部分需要依賴第二部分:過濾條件的展示和選擇。因此我們先不著急去做。

展開或收起的按鈕是否顯示,取決于過濾條件有多少,如果很少,那么就沒必要展示。所以也是跟第二部分的過濾條件有關。

這樣分析來看,我們必須先做第二部分:過濾條件展示。

2.生成分類和品牌過濾

先來看分類和品牌。在我們的數據庫中已經有所有的分類和品牌信息。在這個位置,是不是把所有的分類和品牌信息都展示出來呢?

顯然不是,用戶搜索的條件會對商品進行過濾,而在搜索結果中,不一定包含所有的分類和品牌,直接展示出所有商品分類,讓用戶選擇顯然是不合適的。

無論是分類信息,還是品牌信息,都應該從搜索的結果商品中進行聚合得到。

2.1.擴展返回的結果

原來,我們返回的結果是PageResult對象,里面只有total、totalPage、items3個屬性。但是現在要對商品分類和品牌進行聚合,數據顯然不夠用,我們需要對返回的結果進行擴展,添加分類和品牌的數據。

那么問題來了:以什么格式返回呢?

看頁面:

分類:頁面顯示了分類名稱,但背后肯定要保存id信息。所以至少要有id和name

品牌:頁面展示的有logo,有文字,當然肯定有id,基本上是品牌的完整數據

我們新建一個類,繼承PageResult,然后擴展兩個新的屬性:分類集合和品牌集合:

public class SearchResult extends PageResult<Goods> {private List<Map<String, Object>> categories;private List<Brand> brands;public SearchResult() {}public SearchResult(List<Map<String, Object>> categories, List<Brand> brands) {this.categories = categories;this.brands = brands;}public SearchResult(List<Goods> items, Long total, List<Map<String, Object>> categories, List<Brand> brands) {super(items, total);this.categories = categories;this.brands = brands;}public SearchResult(List<Goods> items, Long total, Integer totalPage, List<Map<String, Object>> categories, List<Brand> brands) {super(items, total, totalPage);this.categories = categories;this.brands = brands;}public List<Map<String, Object>> getCategories() {return categories;}public void setCategories(List<Map<String, Object>> categories) {this.categories = categories;}public List<Brand> getBrands() {return brands;}public void setBrands(List<Brand> brands) {this.brands = brands;} }

2.2.聚合商品分類和品牌

我們修改搜索的業務邏輯,對分類和品牌聚合。

因為索引庫中只有id,所以我們根據id聚合,然后再根據id去查詢完整數據。

所以,商品微服務需要提供一個接口:根據品牌id集合,批量查詢品牌。

修改SearchService:

public SearchResult search(SearchRequest request) {// 判斷查詢條件if (StringUtils.isBlank(request.getKey())) {// 返回默認結果集return null;}// 初始化自定義查詢構建器NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();// 添加查詢條件queryBuilder.withQuery(QueryBuilders.matchQuery("all", request.getKey()).operator(Operator.AND));// 添加結果集過濾,只需要:id,subTitle, skusqueryBuilder.withSourceFilter(new FetchSourceFilter(new String[]{"id", "subTitle", "skus"}, null));// 獲取分頁參數Integer page = request.getPage();Integer size = request.getSize();// 添加分頁queryBuilder.withPageable(PageRequest.of(page - 1, size));String categoryAggName = "categories";String brandAggName = "brands";queryBuilder.addAggregation(AggregationBuilders.terms(categoryAggName).field("cid3"));queryBuilder.addAggregation(AggregationBuilders.terms(brandAggName).field("brandId"));// 執行搜索,獲取搜索的結果集AggregatedPage<Goods> goodsPage = (AggregatedPage<Goods>)this.goodsReponsitory.search(queryBuilder.build());// 解析聚合結果集List<Map<String, Object>> categories = getCategoryAggResult(goodsPage.getAggregation(categoryAggName));List<Brand> brands = getBrandAggResult(goodsPage.getAggregation(brandAggName));// 封裝成需要的返回結果集return new SearchResult(goodsPage.getContent(), goodsPage.getTotalElements(), goodsPage.getTotalPages(), categories, brands); } /*** 解析品牌聚合結果集* @param aggregation* @return*/ private List<Brand> getBrandAggResult(Aggregation aggregation) {// 處理聚合結果集LongTerms terms = (LongTerms)aggregation;// 獲取所有的品牌id桶List<LongTerms.Bucket> buckets = terms.getBuckets();// 定義一個品牌集合,搜集所有的品牌對象List<Brand> brands = new ArrayList<>();// 解析所有的id桶,查詢品牌buckets.forEach(bucket -> {Brand brand = this.brandClient.queryBrandById(bucket.getKeyAsNumber().longValue());brands.add(brand);});return brands;// 解析聚合結果集中的桶,把桶的集合轉化成id的集合// List<Long> brandIds = terms.getBuckets().stream().map(bucket -> bucket.getKeyAsNumber().longValue()).collect(Collectors.toList());// 根據ids查詢品牌//return brandIds.stream().map(id -> this.brandClient.queryBrandById(id)).collect(Collectors.toList());// return terms.getBuckets().stream().map(bucket -> this.brandClient.queryBrandById(bucket.getKeyAsNumber().longValue())).collect(Collectors.toList()); }/*** 解析分類* @param aggregation* @return*/ private List<Map<String,Object>> getCategoryAggResult(Aggregation aggregation) {// 處理聚合結果集LongTerms terms = (LongTerms)aggregation;// 獲取所有的分類id桶List<LongTerms.Bucket> buckets = terms.getBuckets();// 定義一個品牌集合,搜集所有的品牌對象List<Map<String, Object>> categories = new ArrayList<>();List<Long> cids = new ArrayList<>();// 解析所有的id桶,查詢品牌buckets.forEach(bucket -> {cids.add(bucket.getKeyAsNumber().longValue());});List<String> names = this.categoryClient.queryNamesByIds(cids);for (int i = 0; i < cids.size(); i++) {Map<String, Object> map = new HashMap<>();map.put("id", cids.get(i));map.put("name", names.get(i));categories.add(map);}return categories; }

測試:

2.3.頁面渲染數據

2.3.1.過濾參數數據結構

來看下頁面的展示效果:

雖然分類、品牌內容都不太一樣,但是結構相似,都是key和value的結構。

而且頁面結構也極為類似:

所以,我們可以把所有的過濾條件放入一個數組中,然后在頁面利用v-for遍歷一次生成。

其基本結構是這樣的:

[{k:"過濾字段名",options:[{/*過濾字段值對象*/},{/*過濾字段值對象*/}]} ]

我們先在data中定義數組:filters,等待組裝過濾參數:

data: {ly,search:{key: "",page: 1},goodsList:[], // 接收搜索得到的結果total: 0, // 總條數totalPage: 0, // 總頁數filters:[] // 過濾參數集合 },

然后在查詢搜索結果的回調函數中,對過濾參數進行封裝:

然后刷新頁面,通過瀏覽器工具,查看封裝的結果:

2.3.2.頁面渲染數據

首先看頁面原來的代碼:

我們注意到,雖然頁面元素是一樣的,但是品牌會比其它搜索條件多出一些樣式,因為品牌是以圖片展示。需要進行特殊處理。數據展示是一致的,我們采用v-for處理:

<div class="type-wrap" v-for="(f,i) in filters" :key="i" v-if="f.k !== '品牌'"><div class="fl key">{{f.k}}</div><div class="fl value"><ul class="type-list"><li v-for="(option, j) in f.options" :key="j"><a>{{option.name}}</a></li></ul></div><div class="fl ext"></div> </div> <div class="type-wrap logo" v-else><div class="fl key brand">{{f.k}}</div><div class="value logos"><ul class="logo-list"><li v-for="(option, j) in f.options" v-if="option.image"><img :src="option.image" /></li><li style="text-align: center" v-else><a style="line-height: 30px; font-size: 12px" href="#">{{option.name}}</a></li></ul></div><div class="fl ext"><a href="javascript:void(0);" class="sui-btn">多選</a></div> </div>

結果:

3.生成規格參數過濾

3.1.謀而后動

有四個問題需要先思考清楚:

  • 什么時候顯示規格參數過濾? 分類只有一個
  • 如何知道哪些規格需要過濾?
  • 要過濾的參數,其可選值是如何獲取的?
  • 規格過濾的可選值,其數據格式怎樣的?

什么情況下顯示有關規格參數的過濾?

如果用戶尚未選擇商品分類,或者聚合得到的分類數大于1,那么就沒必要進行規格參數的聚合。因為不同分類的商品,其規格是不同的。

因此,我們在后臺需要對聚合得到的商品分類數量進行判斷,如果等于1,我們才繼續進行規格參數的聚合

如何知道哪些規格需要過濾?

我們不能把數據庫中的所有規格參數都拿來過濾。因為并不是所有的規格參數都可以用來過濾,參數的值是不確定的。

值的慶幸的是,我們在設計規格參數時,已經標記了某些規格可搜索,某些不可搜索。

因此,一旦商品分類確定,我們就可以根據商品分類查詢到其對應的規格,從而知道哪些規格要進行搜索。

要過濾的參數,其可選值是如何獲取的?

雖然數據庫中有所有的規格參數,但是不能把一切數據都用來供用戶選擇。

與商品分類和品牌一樣,應該是從用戶搜索得到的結果中聚合,得到與結果品牌的規格參數可選值。

規格過濾的可選值,其數據格式怎樣的?

我們直接看頁面效果:

我們之前存儲時已經將數據分段,恰好符合這里的需求

3.2.實戰

接下來,我們就用代碼實現剛才的思路。

總結一下,應該是以下幾步:

  • 1)用戶搜索得到商品,并聚合出商品分類
  • 2)判斷分類數量是否等于1,如果是則進行規格參數聚合
  • 3)先根據分類,查找可以用來搜索的規格
  • 4)對規格參數進行聚合
  • 5)將規格參數聚合結果整理后返回

3.2.1.擴展返回結果

返回結果中需要增加新數據,用來保存規格參數過濾條件。這里與前面的品牌和分類過濾的json結構類似:

[{"k":"規格參數名","options":["規格參數值","規格參數值"]} ]

因此,在java中我們用List<Map<String, Object>>來表示。

public class SearchResult extends PageResult<Goods> {private List<Map<String, Object>> categories;private List<Brand> brands;private List<Map<String, Object>> specs;public SearchResult() {}public SearchResult(List<Map<String, Object>> categories, List<Brand> brands, List<Map<String, Object>> specs) {this.categories = categories;this.brands = brands;this.specs = specs;}public SearchResult(List<Goods> items, Long total, List<Map<String, Object>> categories, List<Brand> brands, List<Map<String, Object>> specs) {super(items, total);this.categories = categories;this.brands = brands;this.specs = specs;}public SearchResult(List<Goods> items, Long total, Integer totalPage, List<Map<String, Object>> categories, List<Brand> brands, List<Map<String, Object>> specs) {super(items, total, totalPage);this.categories = categories;this.brands = brands;this.specs = specs;}public List<Map<String, Object>> getCategories() {return categories;}public void setCategories(List<Map<String, Object>> categories) {this.categories = categories;}public List<Brand> getBrands() {return brands;}public void setBrands(List<Brand> brands) {this.brands = brands;}public List<Map<String, Object>> getSpecs() {return specs;}public void setSpecs(List<Map<String, Object>> specs) {this.specs = specs;} }

3.2.2.判斷是否需要聚合

首先,在聚合得到商品分類后,判斷分類的個數,如果是1個則進行規格聚合:

我們將聚合的代碼抽取到了一個getParamAggResult方法中。

3.2.3.獲取需要聚合的規格參數

然后,我們需要根據商品分類,查詢所有可用于搜索的規格參數:

要注意的是,這里我們需要根據分類id查詢規格,而規格參數接口需要從商品微服務提供

3.2.4.聚合規格參數

因為規格參數保存時不做分詞,因此其名稱會自動帶上一個.keyword后綴:

3.2.5.解析聚合結果

3.2.6.最終的完整代碼

public SearchResult search(SearchRequest request) {// 判斷查詢條件if (StringUtils.isBlank(request.getKey())) {// 返回默認結果集return null;}// 初始化自定義查詢構建器NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();// 添加查詢條件MatchQueryBuilder basicQuery = QueryBuilders.matchQuery("all", request.getKey()).operator(Operator.AND);queryBuilder.withQuery(basicQuery);// 添加結果集過濾,只需要:id,subTitle, skusqueryBuilder.withSourceFilter(new FetchSourceFilter(new String[]{"id", "subTitle", "skus"}, null));// 獲取分頁參數Integer page = request.getPage();Integer size = request.getSize();// 添加分頁queryBuilder.withPageable(PageRequest.of(page - 1, size));String categoryAggName = "categories";String brandAggName = "brands";queryBuilder.addAggregation(AggregationBuilders.terms(categoryAggName).field("cid3"));queryBuilder.addAggregation(AggregationBuilders.terms(brandAggName).field("brandId"));// 執行搜索,獲取搜索的結果集AggregatedPage<Goods> goodsPage = (AggregatedPage<Goods>)this.goodsReponsitory.search(queryBuilder.build());// 解析聚合結果集List<Map<String, Object>> categories = getCategoryAggResult(goodsPage.getAggregation(categoryAggName));List<Brand> brands = getBrandAggResult(goodsPage.getAggregation(brandAggName));// 判斷分類聚合的結果集大小,等于1則聚合List<Map<String, Object>> specs = null;if (categories.size() == 1) {specs = getParamAggResult((Long)categories.get(0).get("id"), basicQuery);}// 封裝成需要的返回結果集return new SearchResult(goodsPage.getContent(), goodsPage.getTotalElements(), goodsPage.getTotalPages(), categories, brands, specs); }/*** 聚合出規格參數過濾條件* @param id* @param basicQuery* @return*/ private List<Map<String,Object>> getParamAggResult(Long id, QueryBuilder basicQuery) {// 創建自定義查詢構建器NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();// 基于基本的查詢條件,聚合規格參數queryBuilder.withQuery(basicQuery);// 查詢要聚合的規格參數List<SpecParam> params = this.specificationClient.queryParams(null, id, null, true);// 添加聚合params.forEach(param -> {queryBuilder.addAggregation(AggregationBuilders.terms(param.getName()).field("specs." + param.getName() + ".keyword"));});// 只需要聚合結果集,不需要查詢結果集queryBuilder.withSourceFilter(new FetchSourceFilter(new String[]{}, null));// 執行聚合查詢AggregatedPage<Goods> goodsPage = (AggregatedPage<Goods>)this.goodsReponsitory.search(queryBuilder.build());// 定義一個集合,收集聚合結果集List<Map<String, Object>> paramMapList = new ArrayList<>();// 解析聚合查詢的結果集Map<String, Aggregation> aggregationMap = goodsPage.getAggregations().asMap();for (Map.Entry<String, Aggregation> entry : aggregationMap.entrySet()) {Map<String, Object> map = new HashMap<>();// 放入規格參數名map.put("k", entry.getKey());// 收集規格參數值List<Object> options = new ArrayList<>();// 解析每個聚合StringTerms terms = (StringTerms)entry.getValue();// 遍歷每個聚合中桶,把桶中key放入收集規格參數的集合中terms.getBuckets().forEach(bucket -> options.add(bucket.getKeyAsString()));map.put("options", options);paramMapList.add(map);}return paramMapList; }

3.2.7.測試結果

3.3.頁面渲染

3.3.1.渲染規格過濾條件

首先把后臺傳遞過來的specs添加到filters數組:

要注意:分類、品牌的option選項是對象,里面有name屬性,而specs中的option是簡單的字符串,所以需要進行封裝,變為相同的結構:

最后的結果:

3.3.2.展示或收起過濾條件

是不是感覺顯示的太多了,我們可以通過按鈕點擊來展開和隱藏部分內容:

我們在data中定義變量,記錄展開或隱藏的狀態:


然后在按鈕綁定點擊事件,以改變show的取值:

在展示規格時,對show進行判斷:

OK!

4.過濾條件的篩選

當我們點擊頁面的過濾項,要做哪些事情?

  • 把過濾條件保存在search對象中(watch監控到search變化后就會發送到后臺)
  • 在頁面頂部展示已選擇的過濾項
  • 把商品分類展示到頂部面包屑

4.1.保存過濾項

4.1.1.定義屬性

我們把已選擇的過濾項保存在search中:

要注意,在created構造函數中會對search進行初始化,所以要在構造函數中對filter進行初始化:

search.filter是一個對象,結構:

{"過濾項名":"過濾項值" }

4.1.2.綁定點擊事件

給所有的過濾項綁定點擊事件:

要注意,點擊事件傳2個參數:

  • k:過濾項的key
  • option:當前過濾項對象

在點擊事件中,保存過濾項到selectedFilter:

selectFilter(k, o){const obj = {};Object.assign(obj, this.search);if(k === '分類' || k === '品牌'){o = o.id;}obj.filter[k] = o.name || o;this.search = obj; }

另外,這里search對象中嵌套了filter對象,請求參數格式化時需要進行特殊處理,修改common.js中的一段代碼:

我們刷新頁面,點擊后通過瀏覽器功能查看search.filter的屬性變化:

并且,此時瀏覽器地址也發生了變化:

http://www.leyou.com/search.html?key=%E6%89%8B%E6%9C%BA&page=1&filter.%E5%93%81%E7%89%8C=2032&filter.CPU%E5%93%81%E7%89%8C=%E6%B5%B7%E6%80%9D%EF%BC%88Hisilicon%EF%BC%89&filter.CPU%E6%A0%B8%E6%95%B0=%E5%8D%81%E6%A0%B8

網絡請求也正常發出:

4.2.后臺添加過濾條件

既然請求已經發送到了后臺,那接下來我們就在后臺去添加這些條件:

4.2.1.拓展請求對象

我們需要在請求類:SearchRequest中添加屬性,接收過濾屬性。過濾屬性都是鍵值對格式,但是key不確定,所以用一個map來接收即可。

4.2.2.添加過濾條件

目前,我們的基本查詢是這樣的:

現在,我們要把頁面傳遞的過濾條件也加入進去。

因此不能在使用普通的查詢,而是要用到BooleanQuery,基本結構是這樣的:

GET /heima/_search {"query":{"bool":{"must":{ "match": { "title": "小米手機",operator:"and"}},"filter":{"range":{"price":{"gt":2000.00,"lt":3800.00}}}}} }

所以,我們對原來的基本查詢進行改造:(SearchService中的search方法)

因為比較復雜,我們將其封裝到一個方法中:

/*** 構建bool查詢構建器* @param request* @return*/ private BoolQueryBuilder buildBooleanQueryBuilder(SearchRequest request) {BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();// 添加基本查詢條件boolQueryBuilder.must(QueryBuilders.matchQuery("all", request.getKey()).operator(Operator.AND));// 添加過濾條件if (CollectionUtils.isEmpty(request.getFilter())){return boolQueryBuilder;}for (Map.Entry<String, Object> entry : request.getFilter().entrySet()) {String key = entry.getKey();// 如果過濾條件是“品牌”, 過濾的字段名:brandIdif (StringUtils.equals("品牌", key)) {key = "brandId";} else if (StringUtils.equals("分類", key)) {// 如果是“分類”,過濾字段名:cid3key = "cid3";} else {// 如果是規格參數名,過濾字段名:specs.key.keywordkey = "specs." + key + ".keyword";}boolQueryBuilder.filter(QueryBuilders.termQuery(key, entry.getValue()));}return boolQueryBuilder; }

其它不變。

4.3.頁面測試

我們先不點擊過濾條件,直接搜索手機:

總共184條

接下來,我們點擊一個過濾條件:

得到的結果:

5.頁面展示選擇的過濾項(作業)

5.1.商品分類面包屑

當用戶選擇一個商品分類以后,我們應該在過濾模塊的上方展示一個面包屑,把三級商品分類都顯示出來。

用戶選擇的商品分類就存放在search.filter中,但是里面只有第三級分類的id:cid3

我們需要根據它查詢出所有三級分類的id及名稱

5.1.1.提供查詢分類接口

我們在商品微服務中提供一個根據三級分類id查詢1~3級分類集合的方法:

Controller

/*** 根據3級分類id,查詢1~3級的分類* @param id* @return*/ @GetMapping("all/level") public ResponseEntity<List<Category>> queryAllByCid3(@RequestParam("id") Long id){List<Category> list = this.categoryService.queryAllByCid3(id);if (list == null || list.size() < 1) {return new ResponseEntity<>(HttpStatus.NOT_FOUND);}return ResponseEntity.ok(list); }

Service

public List<Category> queryAllByCid3(Long id) {Category c3 = this.categoryMapper.selectByPrimaryKey(id);Category c2 = this.categoryMapper.selectByPrimaryKey(c3.getParentId());Category c1 = this.categoryMapper.selectByPrimaryKey(c2.getParentId());return Arrays.asList(c1,c2,c3); }

測試:

5.1.2.頁面展示面包屑

后臺提供了接口,下面的問題是,我們在哪里去查詢接口?

大家首先想到的肯定是當用戶點擊以后。

但是我們思考一下:用戶點擊以后,就會重新發起請求,頁面刷新,那么你渲染的結果就沒了。

因此,應該是在頁面重新加載完畢后,此時因為過濾條件中加入了商品分類的條件,所以查詢的結果中只有1個分類。

我們判斷商品分類是否只有1個,如果是,則查詢三級商品分類,添加到面包屑即可。

渲染:

刷新頁面:

5.2.其它過濾項

接下來,我們需要在頁面展示用戶已選擇的過濾項,如圖:

我們知道,所有已選擇過濾項都保存在search.filter中,因此在頁面遍歷并展示即可。

但這里有個問題,filter中數據的格式:

基本有四類數據:

  • 商品分類:這個不需要展示,分類展示在面包屑位置
  • 品牌:這個要展示,但是其key和值不合適,我們不能顯示一個id在頁面。需要找到其name值
  • 數值類型規格:這個展示的時候,需要把單位查詢出來
  • 非數值類型規格:這個直接展示其值即可

因此,我們在頁面上這樣處理:

<!--已選擇過濾項--> <ul class="tags-choose"><li class="tag" v-for="(v,k) in search.filter" v-if="k !== 'cid3'" :key="k">{{k === 'brandId' ? '品牌' : k}}:<span style="color: red">{{getFilterValue(k,v)}}</span></span> <i class="sui-icon icon-tb-close"></i> </li> </ul>
  • 判斷如果 k === 'cid3'說明是商品分類,直接忽略
  • 判斷k === 'brandId'說明是品牌,頁面顯示品牌,其它規格則直接顯示k的值
  • 值的處理比較復雜,我們用一個方法getFilterValue(k,v)來處理,調用時把k和v都傳遞

方法內部:

getFilterValue(k,v){// 如果沒有過濾參數,我們跳過展示if(!this.filters || this.filters.length === 0){return null;}let filter = null;// 判斷是否是品牌if(k === 'brandId'){// 返回品牌名稱return this.filters.find(f => f.k === 'brandId').options[0].name;}return v; }

然后刷新頁面,即可看到效果:

5.3.隱藏已經選擇的過濾項

現在,我們已經實現了已選擇過濾項的展示,但是你會發現一個問題:

已經選擇的過濾項,在過濾列表中依然存在:

這些已經選擇的過濾項,應該從列表中移除。

怎么做呢?

你必須先知道用戶選擇了什么。用戶選擇的項保存在search.filter中:

我們可以編寫一個計算屬性,把filters中的 已經被選擇的key過濾掉:

computed:{remainFilters(){const keys = Object.keys(this.search.filter);if(this.search.filter.cid3){keys.push("cid3")}if(this.search.filter.brandId){keys.push("brandId")}return this.filters.filter(f => !keys.includes(f.k));} }

然后頁面不再直接遍歷filters,而是遍歷remainFilters

刷新頁面:

最后發現,還剩下一堆沒選過的。但是都只有一個可選項,此時再過濾沒有任何意義,應該隱藏,所以,在剛才的過濾條件中,還應該添加一條:如果只剩下一個可選項,不顯示

6.取消過濾項

我們能夠看到,每個過濾項后面都有一個小叉,當點擊后,應該取消對應條件的過濾。

思路非常簡單:

  • 給小叉綁定點擊事件
  • 點擊后把過濾項從search.filter中移除,頁面會自動刷新,OK

綁定點擊事件:

綁定點擊事件時,把k傳遞過去,方便刪除

刪除過濾項

removeFilter(k){this.search.filter[k] = null; }

7.優化

搜索系統需要優化的點:

  • 查詢規格參數部分可以添加緩存
  • 聚合計算interval變化頻率極低,所以可以設計為定時任務計算(周期為天),然后緩存起來。
  • elasticsearch本身有查詢緩存,可以不進行優化
  • 商品圖片應該采用縮略圖,減少流量,提高頁面加載速度
  • 圖片采用延遲加載
  • 圖片還可以采用CDN服務器
  • sku信息應該在頁面異步加載,而不是放到索引庫

總結

以上是生活随笔為你收集整理的搜索过滤(乐优)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

欧美一区二区三区免费观看 | 在线 视频 一区二区 | 成人在线视 | 亚洲欧美日本一区二区三区 | 日韩免费一区二区三区 | 久久最新视频 | 久久艹在线 | 国产精品久久久久久一二三四五 | 午夜在线资源 | 4438全国亚洲精品在线观看视频 | 免费在线观看一区二区三区 | 91精品国产综合久久福利不卡 | 黄a在线看| 国产成人黄色网址 | 亚洲影院天堂 | a在线v| 日韩免费久久 | 久久精品屋 | av女优中文字幕在线观看 | 香蕉视频在线免费看 | 国产精品18videosex性欧美 | 亚洲精品视频在线观看免费视频 | 日批视频在线观看免费 | 在线免费观看麻豆 | 久久人91精品久久久久久不卡 | 在线观看视频你懂得 | 天天射天天干天天操 | 中文字幕在线观看av | 日韩精品中文字幕在线观看 | 91热这里只有精品 | 国产在线国偷精品产拍 | 成人黄色大片在线免费观看 | 深夜免费福利网站 | 亚洲精品88欧美一区二区 | 人人狠狠综合久久亚洲婷 | 一区二区三区免费播放 | 91麻豆精品国产91久久久无限制版 | 免费看黄电影 | 国产福利在线免费 | 在线免费日韩 | 国产a网站 | 日韩色在线观看 | 国产99久久久国产精品免费看 | 久久久精品国产一区二区电影四季 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 日韩欧美一区二区在线观看 | 日韩中文字幕免费 | 亚洲成人av片在线观看 | 亚洲情感电影大片 | 久久久久国产一区二区 | 国产色婷婷在线 | 亚州精品在线视频 | 国产一区影院 | 8x成人免费视频 | 欧美日本不卡视频 | 日韩专区一区二区 | 亚洲天天综合 | 日韩一二三 | 国产亚洲精品成人 | 精品 一区 在线 | 国产高清福利在线 | 欧美日本三级 | 久艹视频在线观看 | 成片视频在线观看 | 最近中文字幕第一页 | 蜜桃av人人夜夜澡人人爽 | 国产在线国偷精品产拍免费yy | 99麻豆久久久国产精品免费 | 国产区免费在线 | 欧美成人基地 | 五月天色综合 | 免费视频 你懂的 | 国产小视频你懂的在线 | 亚洲精品成人在线 | 午夜av色| 天天看天天操 | 天天综合天天做天天综合 | 超碰在线91 | 国产精品手机视频 | 黄色av网站在线免费观看 | 在线 视频 一区二区 | 婷婷视频在线播放 | 国产在线a不卡 | 国产精品成人一区二区三区吃奶 | 欧美日韩视频在线一区 | 97av影院| av电影中文 | 在线免费亚洲 | 91麻豆文化传媒在线观看 | 97爱| 黄污网站在线 | 99久久精品午夜一区二区小说 | 久久99久久99精品免观看软件 | 国产福利一区二区三区在线观看 | 久久综合狠狠综合久久综合88 | 欧美精品一区二区三区四区在线 | 国产一级视频免费看 | 超碰97人| 午夜国产福利在线 | 国产黄a三级三级三级三级三级 | 精品视频免费播放 | 在线观看黄网站 | 日韩精品短视频 | 国产美女免费看 | 国产精品美女免费视频 | 国产玖玖精品视频 | 不卡的av在线 | 日韩精品一区二区三区免费视频观看 | 成人国产电影在线观看 | 99人久久精品视频最新地址 | 麻豆传媒视频观看 | 五月婷婷激情综合 | 99精品网站 | 色丁香久久| 久草视频免费看 | 精品视频成人 | 国产精品成人久久久 | 人人爱人人爽 | av电影免费在线看 | 伊甸园av在线 | 99精品视频在线看 | 亚洲精品国产成人 | 久久久久久久久电影 | 中国一级片视频 | 99久久精品国产系列 | 久久久69| 日韩欧美精选 | 不卡精品 | 欧美一区中文字幕 | 国产资源 | 久草网在线观看 | 日韩av片无码一区二区不卡电影 | 激情伊人 | 国产精品久久久视频 | 婷婷播播网 | 激情五月亚洲 | 中文字幕999 | 热久久免费国产视频 | 综合久久五月天 | 亚洲精品免费观看 | 夜夜视频资源 | 丁香 久久 综合 | 日本精品在线看 | 亚洲精选视频免费看 | 日韩美女高潮 | 日韩精品一区二区三区丰满 | 中文字幕丝袜一区二区 | 99久高清在线观看视频99精品热在线观看视频 | 人人玩人人添人人澡超碰 | 国产精品mm | 久久久久免费精品国产小说色大师 | 91在线免费播放 | 国产精品一区二区av影院萌芽 | av黄色在线观看 | 九色精品免费永久在线 | 天天操人 | 久久99精品国产麻豆宅宅 | 亚洲伦理中文字幕 | 日韩成人黄色av | 十八岁免进欧美 | 久久精彩免费视频 | 日韩中文字幕免费视频 | 国产福利一区二区三区在线观看 | 国产永久免费高清在线观看视频 | 四虎亚洲精品 | 久久一本综合 | 欧美视频18 | 色开心 | 久久免费视频这里只有精品 | 色综合五月 | 六月色婷婷 | 爱射综合 | 91久久精品一区二区二区 | 精品福利在线视频 | 日韩影视大全 | 国产美女无遮挡永久免费 | 人人草在线视频 | 午夜影视av | 国产精品久久久久久欧美 | 国产精品免费一区二区 | 久久国产网 | 日韩大片免费观看 | 欧美日韩在线观看一区二区三区 | 亚洲在线视频播放 | 日韩免费在线观看视频 | 国产精品日韩久久久久 | 国产不卡在线播放 | 91av在线免费看 | 中文字幕一区二区三区乱码在线 | 国产精品久久久久久久久久免费 | 国产精品久久久网站 | 欧美日韩亚洲在线观看 | 九九久久婷婷 | av噜噜噜在线播放 | 少妇精品久久久一区二区免费 | 色在线最新| 久久国产精品第一页 | 免费网站黄 | 久久国产精品偷 | 精品国产乱子伦一区二区 | 亚洲高清视频在线 | 亚洲一区二区麻豆 | 激情婷婷欧美 | 国产区高清在线 | 亚洲成人精品在线 | 麻豆视频免费入口 | 亚洲国产精品成人女人久久 | 久久久久国产精品免费免费搜索 | 国产精品久久久久国产精品日日 | 不卡国产在线 | 色小说在线 | 91精品国产自产在线观看永久 | 亚洲成人av免费 | 丁香久久婷婷 | 欧美精品日韩 | 人人插人人射 | 2019中文在线观看 | 久久91久久久久麻豆精品 | 91精品久久久久久久久 | 99精品在线观看视频 | 在线午夜av| 美女激情影院 | 最近中文字幕高清字幕在线视频 | 一区二区不卡 | 97视频免费在线观看 | www.夜夜操.com | 亚洲午夜久久久综合37日本 | av片一区二区 | 国产中文字幕一区二区 | 中文字幕视频三区 | 国产婷婷vvvv激情久 | 久久无码av一区二区三区电影网 | 五月天婷婷视频 | 岛国av在线免费 | 五月婷婷视频在线观看 | 成人av网址大全 | 国产精品专区在线观看 | 免费男女羞羞的视频网站中文字幕 | 亚州av网站 | 国产精品中文字幕av | 天天想夜夜操 | 五月天天天操 | 91九色视频在线观看 | 精品一区二区免费在线观看 | 91av99| 日韩在线观看第一页 | 欧美在线1 | 射射射综合网 | 久久视频在线观看 | 黄色资源在线观看 | 99免费观看视频 | 免费看的黄色录像 | 人人爱人人添 | 最近中文字幕高清字幕免费mv | 成人中文字幕在线 | 在线天堂中文www视软件 | 91av电影| 国产精品1区2区在线观看 | 久久激情综合网 | 欧美日韩国产三级 | 182午夜在线观看 | www免费看片com | 久久久国产一区 | www.久久婷婷| 国产在线视频一区二区三区 | 青青色影院 | 99精品在线免费视频 | 99在线观看 | 人人爽人人爽人人 | 亚洲成aⅴ人片久久青草影院 | 色综合人人 | 2021av在线| 91热精品 | 三上悠亚一区二区在线观看 | 91精品久久久久久粉嫩 | 天天操导航 | 午夜三级在线 | 999久久国产精品免费观看网站 | 一二三久久久 | 成人国产精品久久久春色 | 五月天久久 | 国产精品麻豆视频 | 久久成人午夜 | 亚洲视频在线视频 | 婷婷国产在线观看 | 国产亚洲精品xxoo | 国产97碰免费视频 | 夜夜操综合网 | www色,com| 免费麻豆网站 | 欧美激情第八页 | 久久精品99国产精品 | 免费a v在线 | 国产一区二区久久精品 | 97人人模人人爽人人喊网 | www.国产在线 | 国产精品99久久久久久久久久久久 | 五月天激情综合 | 中文字幕在线一区观看 | 亚洲成人黄色在线观看 | 亚洲区另类春色综合小说 | 国产精品午夜在线观看 | 欧美小视频在线 | www.av免费观看| 亚洲h视频在线 | 亚洲国产一区二区精品专区 | 成人一级在线观看 | 日韩啪啪小视频 | 国产免费观看高清完整版 | 日产乱码一二三区别在线 | 成人a在线观看高清电影 | 亚洲欧美视频一区二区三区 | 中文字幕精品一区久久久久 | 欧美日韩高清在线观看 | 亚洲欧美视频在线 | 国产精品久久久久999 | 国产美女精品视频免费观看 | 天天曰天天爽 | 综合伊人久久 | 国产免费久久av | 国语久久| 99在线视频免费观看 | 日韩精品一区二区在线 | 黄色a在线| 亚州国产精品视频 | 国产91九色蝌蚪 | 91资源在线| 丁香综合av| 99精品久久99久久久久 | 国产一级二级三级在线观看 | 日韩性网站 | 国产在线观看高清视频 | 免费av网址大全 | 五月婷婷开心中文字幕 | 四虎影视精品永久在线观看 | 亚洲精品高清一区二区三区四区 | 亚洲精品久久久久www | 欧美精品成人在线 | 成人中心免费视频 | 天天射天天干天天操 | 激情丁香婷婷 | 久久国内精品视频 | 久久成人精品 | 久久久成人精品 | 99产精品成人啪免费网站 | 在线观看日韩av | 狠狠色丁香婷婷综合久小说久 | 伊人影院在线观看 | 色搞搞 | 久草视频在线资源站 | 日本精品午夜 | 亚洲高清视频在线播放 | 樱空桃av | 日韩欧美视频在线播放 | 久久久久亚洲天堂 | 欧美一区二区免费在线观看 | 五月婷婷电影网 | 亚洲一级片 | 国产h在线观看 | 亚洲欧美国内爽妇网 | 欧美在线视频一区二区 | 亚洲最大的av网站 | av综合 日韩 | 国产女教师精品久久av | a午夜电影| 日本久久成人 | 亚洲天堂网在线观看视频 | 高潮久久久久久久久 | 在线观看久 | 亚洲干 | 久久久久久久影视 | www.xxxx欧美| 国内精品久久久久久久久久清纯 | 精品一区二区三区电影 | 99久久国产免费,99久久国产免费大片 | 日本精品一二区 | 亚洲黄色一级大片 | 成人免费 在线播放 | 亚洲欧洲国产视频 | 亚洲一区二区高潮无套美女 | a在线观看国产 | 久久99久久久久久 | 国产96精品| 三级在线国产 | 黄网站色成年免费观看 | 欧美一级免费片 | av888av.com| 中文字幕乱在线伦视频中文字幕乱码在线 | 久久久精品网站 | 午夜精品久久久久久久久久久 | 青草视频在线 | 成人av在线网 | 高清色免费 | 日韩v欧美v日本v亚洲v国产v | 91看片一区二区三区 | 精品国产自在精品国产精野外直播 | 日韩午夜剧场 | 久久国内视频 | 精品久久国产 | 日韩av影视在线观看 | 九九久久久久久久久激情 | 久久视频在线观看中文字幕 | 97av影院| 国产成人精品午夜在线播放 | 日韩v欧美v日本v亚洲v国产v | 亚洲综合色播 | 人人射人人爱 | 精品主播网红福利资源观看 | 麻豆一区二区 | 91精品久久久久久综合乱菊 | 亚洲特级片 | 一区二区 不卡 | 欧美精品久久久久久久免费 | 国产中文欧美日韩在线 | 国产日产欧美在线观看 | 在线一区二区三区 | 天天爽天天爽 | 美女福利视频在线 | 最新中文字幕在线播放 | 久草精品视频在线看网站免费 | 精品国产一二三四区 | 97国产精品久久 | 日韩女同av | 成年人在线免费看片 | 五月婷婷在线观看 | 亚洲午夜久久久久久久久 | 欧美男女爱爱视频 | 国产成人精品不卡 | 91亚洲永久精品 | 91豆花在线观看 | 亚洲天堂自拍视频 | 欧美日韩在线视频一区二区 | 免费观看成人 | 在线 国产 亚洲 欧美 | 欧美成人区 | 成人亚洲精品久久久久 | 久久午夜羞羞影院 | 草久在线 | 免费黄在线观看 | 久一在线 | 97激情影院 | 久久久久久蜜av免费网站 | 亚洲最新视频在线 | 91在线免费观看网站 | 亚洲免费在线视频 | 国产精品精品久久久 | 午夜在线观看一区 | 在线精品亚洲一区二区 | 91色在线观看视频 | 精品播放| 狠狠操欧美 | 国产一区福利 | 亚洲精品午夜aaa久久久 | av福利网址导航 | 国产色女人 | 免费成人在线电影 | 狠狠色狠狠色综合系列 | 日日夜夜天天久久 | 国产资源免费 | 天堂在线视频免费观看 | 免费观看性生活大片3 | 天天干夜夜夜操天 | 91视频88av| 91免费网 | 久久久久一区二区三区 | 97色在线观看免费视频 | 成年人在线免费看片 | 91成人免费在线 | 91精品国产欧美一区二区成人 | 亚洲国产69 | 少妇bbbb搡bbbb搡bbbb | 亚洲精品视频观看 | 亚洲精品在线观看中文字幕 | 欧美精品乱码久久久久久按摩 | 91社区国产高清 | 亚洲 中文 在线 精品 | 亚洲精品美女久久久 | 五月激情亚洲 | 精品成人a区在线观看 | 五月婷婷黄色 | 精品视频www | 日韩在线观看中文字幕 | 最新中文字幕 | 97超碰在线资源 | 色福利网站 | 国产欧美高清 | 久久久久99精品国产片 | 天天做日日做天天爽视频免费 | 久久久av电影 | 天天激情 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 国产日韩欧美在线免费观看 | 国产精品第一视频 | 97福利视频 | 午夜视频色| 在线免费观看涩涩 | 久久久精品国产免费观看同学 | 国产精品视频地址 | 久久99九九99精品 | 日韩中文字幕在线观看 | 久久99在线观看 | 久久69精品久久久久久久电影好 | 五月婷婷丁香在线观看 | 成人毛片一区 | 在线视频久 | 亚洲成人精品在线 | 久久国产精品网站 | 日韩精品一区二区三区中文字幕 | 久久久999免费视频 日韩网站在线 | 欧美精品久久久久久久 | 亚洲va欧美va | 婷婷六月中文字幕 | 成年人在线电影 | 国产又黄又爽又猛视频日本 | 久久一及片 | 激情av资源 | 黄色av网站在线观看免费 | 国产日韩欧美在线免费观看 | 99视频在线观看视频 | 中文字幕国语官网在线视频 | 国产精品成人久久久久 | 韩日电影在线免费看 | 国产精品va在线播放 | 国内视频一区二区 | 国产视频中文字幕在线观看 | 日本精品免费看 | 91av在线国产 | 国产精品18久久久久vr手机版特色 | 国产精品永久在线观看 | 九九久久精品 | 一级片免费观看视频 | 日本中文字幕在线 | 日韩av二区 | 午夜狠狠操 | 一区二区三区四区精品视频 | 麻豆va一区二区三区久久浪 | 国产精品刺激对白麻豆99 | 国产精品一区二区电影 | 国产97色在线 | 欧美日韩精品免费观看视频 | 九色精品免费永久在线 | 激情婷婷综合网 | 国产精品嫩草55av | 一级a性色生活片久久毛片波多野 | 热久久电影 | 亚洲欧美精品一区二区 | 国产黄色片一级三级 | 欧美日韩另类在线观看 | 欧美三级在线播放 | 亚洲视频资源在线 | 久久美女精品 | 精品亚洲va在线va天堂资源站 | 在线观看岛国 | 日韩av电影一区 | 欧美精品久久久久久 | 亚洲一区二区视频在线 | 99久久超碰中文字幕伊人 | 日韩欧美高清在线观看 | 中文字幕在线视频一区二区三区 | 五月天丁香 | 午夜精品久久久久久久久久 | 在线观看精品黄av片免费 | 久色婷婷 | 日本在线观看一区二区 | 午夜.dj高清免费观看视频 | 欧美日韩一区二区在线观看 | 一区二区激情 | 五月婷婷欧美视频 | 天天干天天怕 | 午夜12点 | 国产一区二区在线免费观看 | av东方在线| 日韩精品久久久久久 | 开心激情五月网 | 日韩亚洲欧美中文字幕 | 特级aaa毛片 | 99热在线观看 | 亚洲mv大片欧洲mv大片免费 | 四虎影视成人精品国库在线观看 | 在线观看国产亚洲 | 视频在线观看入口黄最新永久免费国产 | 97超碰人人澡人人爱 | 久久成人一区 | 在线精品一区二区 | 亚洲成人午夜在线 | av短片在线观看 | 欧美激情第八页 | 亚洲欧美综合精品久久成人 | 国产精品二区三区 | 91视频免费国产 | 国产福利在线不卡 | 成人a视频片观看免费 | 一级黄色大片 | 91麻豆精品国产91久久久久久 | 日日操夜夜操狠狠操 | 亚洲精品在线二区 | 亚洲成a人片77777潘金莲 | 懂色av一区二区三区蜜臀 | 国产一二区视频 | 日韩特级毛片 | 成人午夜电影网 | 人人舔人人舔 | 免费的国产精品 | 亚洲精品国产自产拍在线观看 | 91久久一区二区 | 91免费观看视频网站 | 国产精品免费看久久久8精臀av | 久草在线一免费新视频 | 国产黄色一级片在线 | 色婷婷狠狠五月综合天色拍 | 麻豆91精品视频 | 亚洲成年人在线播放 | 国产不卡免费 | 九九免费观看全部免费视频 | 夜夜爽www | 亚洲国产精品小视频 | 高清av免费观看 | 免费无遮挡动漫网站 | 国产高清在线免费 | 97视频网站 | 少妇搡bbbb搡bbb搡aa | 91探花在线视频 | 在线99视频 | 懂色av懂色av粉嫩av分享吧 | 成人小视频在线观看免费 | 精品国产乱码 | 久久久午夜视频 | 中文字幕之中文字幕 | 国产精品视频大全 | 欧美专区日韩专区 | 天天综合网 天天综合色 | 久久久精品国产一区二区 | 久久99精品国产99久久6尤 | aa一级片 | 天天射天天干天天爽 | 黄毛片在线观看 | 狠狠色狠狠色综合日日小说 | 五月天婷婷免费视频 | 久久久久国产精品厨房 | 国产黄免费看 | 国产小视频在线观看 | 欧美福利片在线观看 | 毛片区| 日韩欧美精品一区二区三区经典 | 午夜国产福利视频 | 黄色一级大片在线免费看产 | 成人黄色小视频 | 久久欧美综合 | 久久久受www免费人成 | 久久精品视频网 | 国产蜜臀av | 免费视频一区二区 | 婷婷久久丁香 | 国产亚洲综合精品 | 日韩免费视频一区二区 | 日韩精品一区二区三区视频播放 | 久久99精品久久久久久清纯直播 | 日日摸日日 | 久久夜夜夜 | 特级黄色一级 | 国产 精品 资源 | 91在线视频免费观看 | 在线导航av| 国产成人91 | av黄在线播放 | 99视频精品视频高清免费 | 狠狠干狠狠久久 | 日本成人黄色片 | 国产精品不卡视频 | 欧美日韩18 | 黄av在线 | 亚洲日日射 | 伊人丁香 | 午夜美女网站 | 亚洲视频 视频在线 | 精品产品国产在线不卡 | 亚洲成人av在线电影 | 蜜臀久久99精品久久久久久网站 | 国产精品a久久 | 色婷婷综合久色 | 99热在线国产精品 | 一区二区三区视频在线 | 日韩av影视在线观看 | 国产在线精品二区 | 91麻豆精品国产91久久久久久 | 久久久精品 一区二区三区 国产99视频在线观看 | 亚洲伦理一区 | 丁香激情视频 | 91成人精品在线 | 91精品视频一区二区三区 | 午夜国产在线观看 | 精品久久久久久久久久 | 在线91av| 久草资源在线观看 | 免费日韩 精品中文字幕视频在线 | 午夜精品一区二区三区四区 | 91高清免费观看 | 亚洲综合五月 | 久久久综合九色合综国产精品 | 欧美精品天堂 | 日韩在线一区二区免费 | 久久精品99久久久久久2456 | 黄色在线成人 | 国产亚洲人 | 一级久久久 | 人人干网 | 91在线最新| 99久热在线精品 | 国产福利一区二区三区视频 | 免费一级毛毛片 | 国产第一页在线观看 | 自拍超碰在线 | 亚洲午夜av电影 | 日日干夜夜骑 | 69精品人人人人 | 在线国产日本 | 欧洲亚洲国产视频 | 网站在线观看你们懂的 | 中文字幕之中文字幕 | 精品国偷自产在线 | 麻豆国产精品va在线观看不卡 | 一区二区网| 久久久电影网站 | 黄色午夜 | 91久久国产露脸精品国产闺蜜 | 激情偷乱人伦小说视频在线观看 | 日本精品中文字幕在线观看 | 久久99在线| 欧美成人视 | av在线一级 | 国产一级性生活视频 | 国产一区二区在线视频观看 | 国产免费精彩视频 | 中文字幕在线视频一区二区 | 亚洲综合色视频 | 成人视屏免费看 | 成人在线视频免费观看 | 色综合天天视频在线观看 | 91漂亮少妇露脸在线播放 | 日日草av| 97超碰超碰久久福利超碰 | 天海翼一区二区三区免费 | 色香蕉网| 日本成人免费在线观看 | 操操操操网 | 99免费| 又黄又刺激又爽的视频 | 国产99久久久国产精品成人免费 | 精品久久久久久久久久久久久久久久久久 | 91精彩视频在线观看 | 日日摸日日碰 | 麻豆91精品 | 九九视频在线播放 | 午夜视频在线观看一区二区三区 | 国产日韩精品在线观看 | 久久国产欧美日韩 | 久久久久国产精品免费网站 | 国产中文| 亚洲综合干 | 国产精品a久久久久 | 99久久精品国产系列 | 日本高清免费中文字幕 | 97在线精品 | 2018亚洲男人天堂 | 国产精品久久久久久久7电影 | 国产精品午夜久久 | 91一区二区在线 | 91成人网在线播放 | 丁香网五月天 | 久久久免费在线观看 | 91精品国产九九九久久久亚洲 | 99超碰在线播放 | 国产.精品.日韩.另类.中文.在线.播放 | 黄色三级网站在线观看 | 日日夜色| 国产亚洲精品中文字幕 | 久久久私人影院 | 成 人 黄 色 视频 免费观看 | 国产视频资源 | 亚洲人久久 | 五月丁婷婷 | 亚洲国内精品视频 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 亚洲精品国产精品乱码在线观看 | 国产中文视频 | 久久亚洲精品电影 | 久草视频免费在线播放 | 婷婷综合伊人 | 在线国产激情视频 | 亚洲精品视频在线观看免费视频 | 天天干天天摸天天操 | 国产一级免费视频 | 黄色特一级片 | av三级在线免费观看 | 亚洲精品久久视频 | 婷婷在线看 | 日韩激情在线 | 亚洲高清在线观看视频 | 黄色免费视频在线观看 | 精品久久久久久久久久 | 色综合天天干 | 欧美日韩国产在线 | 久久精品久久久久久久 | 亚洲免费公开视频 | 国产精品久久久久久久久久久久久久 | 国产一区二区手机在线观看 | 久久人人爽视频 | 欧美一区二区三区在线播放 | 国产99久久久久久免费看 | 色香蕉视频 | 中文字幕专区高清在线观看 | 一区二区毛片 | 国产69精品久久久久久 | 日韩欧美视频免费观看 | 456免费视频 | 麻豆果冻剧传媒在线播放 | 国产123区在线观看 国产精品麻豆91 | 国产91丝袜在线播放动漫 | www.夜夜操.com | 国产一区二区在线播放 | 久久精品国产亚洲 | 国产精品a久久 | 亚洲精品乱码久久久久久9色 | 国产中文字幕视频在线观看 | 亚洲天堂网站视频 | 国产精品一区二区中文字幕 | 五月婷婷狠狠 | 在线观看岛国 | 亚洲va欧美va国产va黑人 | 在线观看www91 | 久久久国产精品人人片99精片欧美一 | 亚洲在线精品视频 | 欧美在线视频a | 1000部18岁以下禁看视频 | 国产网站色 | 日韩素人在线观看 | 一本一本久久a久久精品综合 | 人人爱人人射 | 日本黄色免费电影网站 | 97电影在线观看 | 国产精品原创在线 | 91精品国产欧美一区二区成人 | 五月婷婷操 | 中文字幕色综合网 | 亚洲精品视频久久 | 日日夜夜天天射 | 美女亚洲精品 | 黄色免费网| 欧美日韩三级在线观看 | 黄色在线观看免费网站 | 午夜精品电影一区二区在线 | 九九热视频在线播放 | 丁香六月色 | 中文字幕精品三区 | 免费观看一区 | 色窝资源 | 日韩电影久久久 | 中文字幕av免费观看 | 成人一区二区三区中文字幕 | 欧美-第1页-屁屁影院 | 国产成人精品av | 成年人免费观看国产 | 国产九九热视频 | 黄色.com| 久久久免费视频播放 | 免费特级黄色片 | 99热只有精品在线观看 | 狠狠干干 | av免费网站 | 亚洲视频2 | 亚洲一区二区三区91 | 日日色综合 | 久久视频精品在线观看 | 亚洲欧美日韩国产 | 日韩系列在线观看 | 精品理论片 | 91精品在线观看入口 | 91中文字幕一区 | 亚洲男人天堂2018 | 最近更新好看的中文字幕 | 成人h视频在线播放 | 亚州精品天堂中文字幕 | 国产丝袜一区二区三区 | 亚洲成人第一区 | 欧美激情综合色综合啪啪五月 | 激情亚洲综合在线 | 亚洲精品视频免费在线观看 | 天堂v中文 | 国产成人在线播放 | 伊人手机在线 | av资源中文字幕 | 久久综合狠狠综合久久综合88 | 国产视频一区二区在线观看 | 色综合久久久久综合体 | 五月婷丁香 | 日韩综合在线观看 | www.伊人色.com | 久久久91精品国产一区二区精品 | 99久久精品国产欧美主题曲 | 欧美影片| 久久久精品福利视频 | 黄色影院在线观看 | 91原创在线观看 | 精品 激情 | 美腿丝袜一区二区三区 | 久久久久国产精品免费网站 | 久久婷婷一区二区三区 | www.成人久久 | 国产精品二区在线观看 | 色婷婷av一区 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 日本黄色免费播放 | www国产精品com | 黄色大全在线观看 | 久久精品视频网 | 久久久久久美女 | 久久在线视频精品 | www.夜夜草| 国产一级精品在线观看 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 伊人www22综合色 | 日韩免 | 免费观看av网站 | 日韩一区二区三免费高清在线观看 | 成人久久视频 | 国产精品99久久免费黑人 | 国际精品久久久 | 最近中文字幕完整视频高清1 | 久久视频这里有精品 | 女人18片| 国产精品久久久久四虎 | 日韩在线视频线视频免费网站 | 视频二区在线视频 | 日本三级全黄少妇三2023 | 天天综合色网 | 久久在线观看 | www.黄色片.com | 一二三区视频在线 | 国产精品久久久久婷婷 | 欧亚日韩精品一区二区在线 | 国产99久久九九精品免费 | 中文资源在线官网 | 国产午夜一区 | 日本精品中文字幕在线观看 | 色吊丝在线永久观看最新版本 | 日本色小说视频 | 久久男人中文字幕资源站 | 韩国av永久免费 | 久久免费视频网站 | 91人人人 | 91视频高清 | 久草在线免费色站 | av电影在线观看完整版一区二区 | 在线观看爱爱视频 | 毛片网在线观看 | 视频在线播放国产 | 97精品国产97久久久久久久久久久久 | 丁香资源影视免费观看 | 岛国精品一区二区 | 成年人免费在线观看网站 | 天天躁日日躁狠狠躁av中文 | 人人超在线公开视频 | 中文字幕乱在线伦视频中文字幕乱码在线 | 九九视频这里只有精品 | 香蕉成人在线视频 | 日韩精品一区二区在线观看视频 | 91麻豆精品国产自产在线游戏 | 国产精品18久久久久久不卡孕妇 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 国产亚州精品视频 | 五月天激情视频 | 精品免费视频. | 国产亚洲欧美日韩高清 | 日韩精品2区 | 狠狠躁18三区二区一区ai明星 | 久久影视中文字幕 | 国产视频中文字幕 | 在线观看成人av | 色婷婷久久久 | 国产精品麻豆99久久久久久 | 一区二区 不卡 | 久久国语露脸国产精品电影 | 黄色在线免费观看网址 | 欧美日韩三级在线观看 | 日本在线观看一区二区三区 | 国内精品二区 | 亚洲精品中文字幕视频 | 国产精品99在线观看 | 91自拍成人 | 亚洲黄电影 | 91九色成人 | 久久精品视频在线免费观看 | 亚洲欧美成人综合 | 国产精品久久99精品毛片三a | 日韩va亚洲va欧美va久久 | 精品三级av| 在线看岛国av | 91免费高清|