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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Lucene从入门到进阶(6.6.0版本)

發布時間:2025/3/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lucene从入门到进阶(6.6.0版本) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Lucene學習筆記


前言

基于最新的Lucene-6.6.0進行學習,很多方法都過時并不適用了,本文盡可能以最簡單的方法入門學習。

第二章的例子都是官方的例子,寫得很好很詳細,但是竟然一句注釋都沒有,里面的注釋都是我自己添加的,可能有不正確的理解,望體諒,可以將錯誤的注解反饋給我。

第三章開始是自己寫的例子,很簡單,很好理解,建議是直接從第三章開始看。

1???資源準備

1.1入門文檔

軟件文檔:http://lucene.apache.org/core/6_6_0/index.html

可以根據該文檔看官方例子。

1.2 開發文檔

?????? Luence核心coreAPI文檔:http://lucene.apache.org/core/6_6_0/core/index.html

1.3 導入Maven依賴

導入使用lucene所必須的jar包

<dependency>
? <groupId>
org.apache.lucene</groupId>
? <artifactId>
lucene-core</artifactId>
? <version>
6.6.0</version>
</dependency>
<dependency>
? <groupId>
org.apache.lucene</groupId>
? <artifactId>
lucene-analyzers-common</artifactId>
? <version>
6.6.0</version>
</dependency>
<dependency>
? <groupId>
org.apache.lucene</groupId>
? <artifactId>
lucene-queryparser</artifactId>
? <version>
6.6.0</version>
</dependency>
<!-- 官方測試例子 -->
<dependency>
? <groupId>
org.apache.lucene</groupId>
? <artifactId>
lucene-demo</artifactId>
? <version>
6.6.0</version>
</dependency>

1.1.4 Luke

Luke是專門用于Lucene的索引查看工具

GitHub地址:https://github.com/DmitryKey/luke

安裝步驟:

  • Clone the repository.
  • Run?mvn install?from the project directory. (Make sure you have Java and Maven installed before doing this)
  • Use?luke.sh?or?luke.bat?for launching luke from the command line based on the OS you are in.
  • (Alternatively, for older versions of lukeyou can directly download the jar file from the?releases?page and run it with the command?java -jarluke-with-deps.jar)

    2 入門

    2.1 IndexFiels

    官方例子 IndexFiels.java創建一個Lucene索引。

    該類啟動要往main方法寫入參數,可以有三種參數寫入方式,這里就寫一種,使用IDEA在配置中寫入如下參數:

    2.1.1 Test.txt的內容如下:

    numberA

    numberB

    number 范德薩 jklj

    test

    你好

    不錯啊

    ?

    2.1.2 代碼

    package com.bingo.backstage;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.LinkOption; import java.nio.file.OpenOption; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.util.Date; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.*; import org.apache.lucene.document.Field.Store; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.Term; import org.apache.lucene.index.IndexWriterConfig.OpenMode; import org.apache.lucene.store.FSDirectory;/*** Created by MoSon on 2017/6/30.*/public class IndexFiles {private IndexFiles() {}public static void main(String[] args) {//在運行是要添加參數如:-docs (你文件的路徑)String usage = "java com.bingo.backstage.IndexFiles [-index INDEX_PATH] [-docs DOCS_PATH] [-update]\n\n" +"This indexes the documents in DOCS_PATH, creating a Lucene indexin INDEX_PATH that can be searched with SearchFiles";String indexPath = "index";String docsPath = null;boolean create = true;for(int docDir = 0; docDir < args.length; ++docDir) {if("-index".equals(args[docDir])) {indexPath = args[docDir + 1];++docDir;} else if("-docs".equals(args[docDir])) {docsPath = args[docDir + 1];++docDir;} else if("-update".equals(args[docDir])) {create = false;}}if(docsPath == null) {System.err.println("Usage: " + usage);System.exit(1);}Path var13 = Paths.get(docsPath, new String[0]);if(!Files.isReadable(var13)) {System.out.println("Document directory \'" + var13.toAbsolutePath() + "\' does not exist or is not readable, please check the path");System.exit(1);}Date start = new Date();try {System.out.println("Indexing to directory \'" + indexPath + "\'...");//打開文件路徑FSDirectory e = FSDirectory.open(Paths.get(indexPath, new String[0]));StandardAnalyzer analyzer = new StandardAnalyzer();IndexWriterConfig iwc = new IndexWriterConfig(analyzer);if(create) {iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE);} else {iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND);}IndexWriter writer = new IndexWriter(e, iwc);indexDocs(writer, var13);writer.close();Date end = new Date();System.out.println(end.getTime() - start.getTime() + " total milliseconds");} catch (IOException var12) {System.out.println(" caught a " + var12.getClass() + "\n with message: " + var12.getMessage());}}static void indexDocs(final IndexWriter writer, Path path) throws IOException {if(Files.isDirectory(path, new LinkOption[0])) {Files.walkFileTree(path, new SimpleFileVisitor() {public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {try {IndexFiles.indexDoc(writer, file, attrs.lastModifiedTime().toMillis());} catch (IOException var4) {;}return FileVisitResult.CONTINUE;}});} else {indexDoc(writer, path, Files.getLastModifiedTime(path, new LinkOption[0]).toMillis());}}static void indexDoc(IndexWriter writer, Path file, long lastModified) throws IOException {InputStream stream = Files.newInputStream(file, new OpenOption[0]);Throwable var5 = null;try {Document doc = new Document();StringField pathField = new StringField("path", file.toString(), Field.Store.YES);doc.add(pathField);doc.add(new LongPoint("modified", new long[]{lastModified}));doc.add(new TextField("contents", new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8))));if(writer.getConfig().getOpenMode() == IndexWriterConfig.OpenMode.CREATE) {System.out.println("adding " + file);writer.addDocument(doc);} else {System.out.println("updating " + file);writer.updateDocument(new Term("path", file.toString()), doc);}} catch (Throwable var15) {var5 = var15;try {throw var15;} catch (Throwable throwable) {throwable.printStackTrace();}} finally {if(stream != null) {if(var5 != null) {try {stream.close();} catch (Throwable var14) {var5.addSuppressed(var14);}} else {stream.close();}}}} }

    2.1.3啟動效果

    將會在跟目錄下自動生成一個文件用來保存索引


    使用Luke查看效果:


    發現沒有添加中文進去


    2.1.4 分析

    IndexFiles類創建一個Lucene索引。

    在主()方法分析命令行參數,則在制備用于實例化 IndexWriter,打開 Directory,和實例化StandardAnalyzer 和IndexWriterConfig。

    所述的值-index命令行參數是其中應該存儲所有索引信息文件系統目錄的名稱。如果IndexFiles與在給定的相對路徑調用-index命令行參數,或者如果-index沒有給出命令行參數,使默認的相對索引路徑“ 指數 ”被使用,索引路徑將被創建作為當前工作目錄的子目錄(如果它不存在)。在某些平臺上,可以在不同的目錄(例如用戶的主目錄)中創建索引路徑。

    所述-docs命令行參數值是包含文件的目錄的位置被索引。

    該-update命令行參數告訴 IndexFiles不刪除索引,如果它已經存在。當沒有給出-update時,IndexFiles將在索引任何文檔之前首先擦拭平板。

    IndexWriterDirectory使用Lucene 來存儲索引中的信息。除了 我們使用的實現之外,還有其他幾個可以寫入RAM,數據庫等的Directory子類。FSDirectory

    Lucene Analyzer正在處理管道,將文本分解為索引令牌,也稱為條款,并可選擇對這些令牌進行其他操作,例如縮小,同義詞插入,過濾掉不需要的令牌等。我們使用的Analyzer是StandardAnalyzer,它使用Unicode標準附件#29中指定的Unicode文本分段算法中的Word Break規則; 將令牌轉換為小寫字母; 然后過濾掉停用詞。停用詞是諸如文章(a,an,等等)和其他可能具有較少搜索價值的標記的常用語言單詞。應該注意的是,每個語言都有不同的規則,你應該為每個語言使用適當的分析器。

    該IndexWriterConfig實例適用于所有配置的IndexWriter。例如,我們將OpenMode設置為基于-update命令行參數的值使用。

    在文件中進一步看,在IndexWriter被實例化之后,應該看到indexDocs()代碼。此遞歸函數可以抓取目錄并創建Document對象。該文獻僅僅是一個數據對象來表示從文件以及其創建時間和位置的文本內容。這些實例被添加到IndexWriter。如果給出了 -update命令行參數,則 IndexWriterConfig OpenMode將被設置為OpenMode.CREATE_OR_APPEND,而不是向索引添加文檔,IndexWriter將通過嘗試找到具有相同標識符的已經索引的文檔來更新它們在索引中(在我們的例子中,文件路徑作為標識符); 如果存在,則從索引中刪除它; 然后將新文檔添加到索引中。

    2.2 SearchFiles

    搜索文件

    2.2.1代碼

    package com.bingo.backstage;import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.FSDirectory;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Date;/*** Created by MoSon on 2017/6/30.*/public class SearchFiles {private SearchFiles() {}public static void main(String[] args) throws Exception {String usage = "Usage:\tjava com.bingo.backstage.SearchFiles [-index dir] [-field f] [-repeat n] [-queries file] [-query string] [-raw] [-paging hitsPerPage]\n\nSee http://lucene.apache.org/core/4_1_0/demo/ for details.";if(args.length > 0 && ("-h".equals(args[0]) || "-help".equals(args[0]))) {System.out.println(usage);System.exit(0);}String index = "index";String field = "contents";String queries = null;int repeat = 0;boolean raw = false;String queryString = null;int hitsPerPage = 10;for(int reader = 0; reader < args.length; ++reader) {if("-index".equals(args[reader])) {index = args[reader + 1];++reader;} else if("-field".equals(args[reader])) {field = args[reader + 1];++reader;} else if("-queries".equals(args[reader])) {queries = args[reader + 1];++reader;} else if("-query".equals(args[reader])) {queryString = args[reader + 1];++reader;} else if("-repeat".equals(args[reader])) {repeat = Integer.parseInt(args[reader + 1]);++reader;} else if("-raw".equals(args[reader])) {raw = true;} else if("-paging".equals(args[reader])) {hitsPerPage = Integer.parseInt(args[reader + 1]);if(hitsPerPage <= 0) {System.err.println("There must be at least 1 hit per page.");System.exit(1);}++reader;}}//打開文件DirectoryReader var18 = DirectoryReader.open(FSDirectory.open(Paths.get(index, new String[0])));IndexSearcher searcher = new IndexSearcher(var18);StandardAnalyzer analyzer = new StandardAnalyzer();BufferedReader in = null;if(queries != null) {in = Files.newBufferedReader(Paths.get(queries, new String[0]), StandardCharsets.UTF_8);} else {in = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8));}QueryParser parser = new QueryParser(field, analyzer);do {if(queries == null && queryString == null) {System.out.println("Enter query: ");}String line = queryString != null?queryString:in.readLine();if(line == null || line.length() == -1) {break;}line = line.trim();if(line.length() == 0) {break;}Query query = parser.parse(line);System.out.println("Searching for: " + query.toString(field));if(repeat > 0) {Date start = new Date();for(int end = 0; end < repeat; ++end) {searcher.search(query, 100);}Date var19 = new Date();System.out.println("Time: " + (var19.getTime() - start.getTime()) + "ms");}doPagingSearch(in, searcher, query, hitsPerPage, raw, queries == null && queryString == null);} while(queryString == null);var18.close();}public static void doPagingSearch(BufferedReader in, IndexSearcher searcher, Query query, int hitsPerPage, boolean raw, boolean interactive) throws IOException {TopDocs results = searcher.search(query, 5 * hitsPerPage);ScoreDoc[] hits = results.scoreDocs;int numTotalHits = results.totalHits;System.out.println(numTotalHits + " total matching documents");int start = 0;int end = Math.min(numTotalHits, hitsPerPage);while(true) {if(end > hits.length) {System.out.println("Only results 1 - " + hits.length + " of " + numTotalHits + " total matching documents collected.");System.out.println("Collect more (y/n) ?");String quit = in.readLine();if(quit.length() == 0 || quit.charAt(0) == 110) {break;}hits = searcher.search(query, numTotalHits).scoreDocs;}end = Math.min(hits.length, start + hitsPerPage);for(int var15 = start; var15 < end; ++var15) {if(raw) {System.out.println("doc=" + hits[var15].doc + " score=" + hits[var15].score);} else {Document line = searcher.doc(hits[var15].doc);String page = line.get("path");if(page != null) {System.out.println(var15 + 1 + ". " + page);String title = line.get("title");if(title != null) {System.out.println("?? Title: " + line.get("title"));}} else {System.out.println(var15 + 1 + ". No path for this document");}}}if(!interactive || end == 0) {break;}if(numTotalHits >= end) {boolean var16 = false;while(true) {System.out.print("Press ");if(start - hitsPerPage >= 0) {System.out.print("(p)revious page, ");}if(start + hitsPerPage < numTotalHits) {System.out.print("(n)ext page, ");}System.out.println("(q)uit or enter number to jump to a page.");String var17 = in.readLine();if(var17.length() == 0 || var17.charAt(0) == 113) {var16 = true;break;}if(var17.charAt(0) == 112) {start = Math.max(0, start - hitsPerPage);break;}if(var17.charAt(0) == 110) {if(start + hitsPerPage < numTotalHits) {start += hitsPerPage;}break;}int var18 = Integer.parseInt(var17);if((var18 - 1) * hitsPerPage < numTotalHits) {start = (var18 - 1) * hitsPerPage;break;}System.out.println("No such page");}if(var16) {break;}end = Math.min(numTotalHits, start + hitsPerPage);}}} }

    2.2.2 運行效果

    可以看出是跟上面Luke工具查看的結果一樣,只有是對了才能查到


    2.2.3 分析

    該類主要與一個IndexSearcher,, StandardAnalyzer(在IndexFiles類中使用)和一個QueryParser。查詢解析器是用一個分析器構造的,用于以與解釋文檔相同的方式解釋查詢文本:查找單詞邊界,縮小和刪除無用單詞,如“a”,“an”和“the”。該 Query對象包含 QueryParser傳遞給搜索者的結果。請注意,也可以以編程方式構建豐富Query 對象,而不使用查詢解析器。查詢語法分析器只能將 Lucene查詢語法解碼為相應的 Query對象。

    SearchFiles使用最大 n個匹配IndexSearcher.search(query,n)返回的方法 。結果以頁面打印,按分數(即相關性)排序。

    2.3 SimpleSortedSetFacetsExample

    一個簡單的例子,比前面的兩個Demo理解起來容易一些。

    該例子使用SortedSetDocValuesFacetField和SortedSetDocValuesFacetCounts顯示了簡單的使用分面索引和搜索。

    以下代碼里面有注釋,結合起來看會比較容易理解。

    2.3.1 代碼

    package com.bingo.backstage.facet;import java.io.IOException; import java.util.ArrayList; import java.util.List;import org.apache.lucene.analysis.core.WhitespaceAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.facet.DrillDownQuery; import org.apache.lucene.facet.FacetResult; import org.apache.lucene.facet.FacetsCollector; import org.apache.lucene.facet.FacetsConfig; import org.apache.lucene.facet.sortedset.DefaultSortedSetDocValuesReaderState; import org.apache.lucene.facet.sortedset.SortedSetDocValuesFacetCounts; import org.apache.lucene.facet.sortedset.SortedSetDocValuesFacetField; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.IndexWriterConfig.OpenMode; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.MatchAllDocsQuery; import org.apache.lucene.store.Directory; import org.apache.lucene.store.RAMDirectory;/*** Created by MoSon on 2017/6/30.*/public class SimpleSortedSetFacetsExample {//RAMDirectory:內存駐留目錄實現。 默認情況下,鎖定實現是SingleInstanceLockFactory。private final Directory indexDir = new RAMDirectory();private final FacetsConfig config = new FacetsConfig();public SimpleSortedSetFacetsExample() {}private void index() throws IOException {初始化索引創建器//WhitespaceAnalyzer僅僅是去除空格,對字符沒有lowcase,不支持中文;并且不對生成的詞匯單元進行其他的規范化處理。//openMode:創建索引模式:CREATE,覆蓋模式; APPEND,追加模式//IndexWriter:創建并維護索引IndexWriter indexWriter = new IndexWriter(this.indexDir, (new IndexWriterConfig(new WhitespaceAnalyzer())).setOpenMode(OpenMode.CREATE));//建立文檔Document doc = new Document();// 創建Field對象,并放入doc對象中doc.add(new SortedSetDocValuesFacetField("Author", "Bob"));doc.add(new SortedSetDocValuesFacetField("Publish Year", "2010"));// 寫入IndexWriterindexWriter.addDocument(this.config.build(doc));doc = new Document();doc.add(new SortedSetDocValuesFacetField("Author", "Lisa"));doc.add(new SortedSetDocValuesFacetField("Publish Year", "2010"));indexWriter.addDocument(this.config.build(doc));doc = new Document();doc.add(new SortedSetDocValuesFacetField("Author", "Lisa"));doc.add(new SortedSetDocValuesFacetField("Publish Year", "2012"));indexWriter.addDocument(this.config.build(doc));doc = new Document();doc.add(new SortedSetDocValuesFacetField("Author", "Susan"));doc.add(new SortedSetDocValuesFacetField("Publish Year", "2012"));indexWriter.addDocument(this.config.build(doc));doc = new Document();doc.add(new SortedSetDocValuesFacetField("Author", "Frank"));doc.add(new SortedSetDocValuesFacetField("Publish Year", "1999"));indexWriter.addDocument(this.config.build(doc));indexWriter.close();}//查詢并統計文檔的信息private List<FacetResult> search() throws IOException {//基本都是一層包著一層封裝//DirectoryReader是可以讀取目錄中的索引的CompositeReader的實現。DirectoryReader indexReader = DirectoryReader.open(this.indexDir);//通過一個IndexReader實現搜索。IndexSearcher searcher = new IndexSearcher(indexReader);DefaultSortedSetDocValuesReaderState state = new DefaultSortedSetDocValuesReaderState(indexReader);//收集命中后續刻面。 一旦你運行了一個搜索并收集命中,就可以實例化一個Facets子類來進行細分計數。 使用搜索實用程序方法執行普通搜索,但也會收集到Collector中。FacetsCollector fc = new FacetsCollector();//實用方法,搜索并收集所有的命中到提供的CollectorFacetsCollector.search(searcher, new MatchAllDocsQuery(), 10, fc);//計算所提供的匹配中的所有命中。SortedSetDocValuesFacetCounts facets = new SortedSetDocValuesFacetCounts(state, fc);ArrayList results = new ArrayList();//getTopChildren:返回指定路徑下的頂級子標簽。results.add(facets.getTopChildren(10, "Author", new String[0]));results.add(facets.getTopChildren(10, "Publish Year", new String[0]));indexReader.close();return results;}private FacetResult drillDown() throws IOException {DirectoryReader indexReader = DirectoryReader.open(this.indexDir);IndexSearcher searcher = new IndexSearcher(indexReader);DefaultSortedSetDocValuesReaderState state = new DefaultSortedSetDocValuesReaderState(indexReader);DrillDownQuery q = new DrillDownQuery(this.config);//添加查詢條件q.add("Publish Year", new String[]{"2012"});FacetsCollector fc = new FacetsCollector();FacetsCollector.search(searcher, q, 10, fc);SortedSetDocValuesFacetCounts facets = new SortedSetDocValuesFacetCounts(state, fc);//獲取符合的作者FacetResult result = facets.getTopChildren(10, "Author", new String[0]);indexReader.close();return result;}public List<FacetResult> runSearch() throws IOException {this.index();return this.search();}public FacetResult runDrillDown() throws IOException {this.index();return this.drillDown();}public static void main(String[] args) throws Exception {System.out.println("Facet counting example:");System.out.println("-----------------------");SimpleSortedSetFacetsExample example = new SimpleSortedSetFacetsExample();List results = example.runSearch();System.out.println("Author: " + results.get(0));System.out.println("Publish Year: " + results.get(0));System.out.println("\n");System.out.println("Facet drill-down example (Publish Year/2010):");System.out.println("---------------------------------------------");System.out.println("Author: " + example.runDrillDown());} }

    2.3.2????????運行效果


    3 簡單上手

    3.1 創建索引

    這是自己寫的例子,很好理解。

    簡單地添加內容到索引庫。

    3.1.1 代碼

    ?

    package com.bingo.backstage;import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.LegacyLongField; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory;import java.io.IOException; import java.nio.file.FileSystems; import java.nio.file.Path;import static org.apache.lucene.document.TextField.TYPE_STORED;/*** Created by MoSon on 2017/6/30.*/public class CreateIndex {public static void main(String[] args) throws IOException {//定義IndexWriter//index是一個相對路徑,當前工程Path path = FileSystems.getDefault().getPath("", "index");Directory directory = FSDirectory.open(path);//定義分詞器Analyzer analyzer = new StandardAnalyzer();IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer).setOpenMode(IndexWriterConfig.OpenMode.CREATE);IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig);//定義文檔Document document = new Document();//定義文檔字段document.add(new LegacyLongField("id", 5499, Field.Store.YES));document.add(new Field("title", "小米6", TYPE_STORED));document.add(new Field("sellPoint", "驍龍8356G內存,雙攝!", TYPE_STORED));//寫入數據indexWriter.addDocument(document);//添加新的數據document = new Document();document.add(new LegacyLongField("id", 8324, Field.Store.YES));document.add(new Field("title", "OnePlus5", TYPE_STORED));document.add(new Field("sellPoint", "8核,8G運行內存", TYPE_STORED));indexWriter.addDocument(document);//提交indexWriter.commit();//關閉indexWriter.close();}}

    ?

    3.1.2結果

    一下是使用Luke查看的結果


    3.2 分詞搜索

    根據條件查詢符合的內容

    3.2.1 代碼

    package com.bingo.backstage;import org.apache.lucene.document.Document; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Term; import org.apache.lucene.search.*; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory;import java.io.IOException; import java.nio.file.FileSystems; import java.nio.file.Path;/*** Created by MoSon on 2017/7/1.*/public class Search {public static void main(String[] args) throws IOException {//定義索引目錄Path path = FileSystems.getDefault().getPath("index");Directory directory = FSDirectory.open(path);//定義索引查看器IndexReader indexReader = DirectoryReader.open(directory);//定義搜索器IndexSearcher indexSearcher = new IndexSearcher(indexReader);//搜索內容//定義查詢字段Term term = new Term("sellPoint","");Query query = new TermQuery(term);//命中前10條文檔TopDocs topDocs = indexSearcher.search(query,10);//打印命中數System.out.println("命中數:"+topDocs.totalHits);//取出文檔ScoreDoc[] scoreDocs = topDocs.scoreDocs;//遍歷取出數據for (ScoreDoc scoreDoc : scoreDocs){//通過indexSearcherdoc方法取出文檔Document doc = indexSearcher.doc(scoreDoc.doc);System.out.println("id:"+doc.get("id"));System.out.println("sellPoint:"+doc.get("sellPoint"));}//關閉索引查看器indexReader.close();} }

    3.2.2 運行結果

    將符合條件的結果查詢并顯示。

    4???Lucene創建索引核心API

    Directory? 索引操作目錄

    Analyzer?? 分詞器

    Document 索引中文檔對象

    IndexableField 文檔內部數據信息

    IndexWriterConfig 索引生成配置信息

    IndexWriter? 索引生成對象

    5???IK分詞器

    5.1下載

    下載適合Lucene的IKAnalyzer

    鏈接:http://download.csdn.net/detail/fanpei_moukoy/9796612

    5.2 基本使用

    使用IK分詞器對中文進行詞意劃分。

    使用方式:將系統的Analyzer替換為IKAnalyzer


    效果:

    能對常用的詞語識別并劃分,但還不足夠,例如“雙攝像頭”,“驍龍”識別出來。


    5.3 自定義分詞器

    創建配置文件


    創建自定義的擴展字典


    分詞效果:


    5.4 使用分頁查詢

    代碼:

    packagecom.bingo.backstage;

    import
    org.apache.lucene.document.Document;
    import
    org.apache.lucene.index.DirectoryReader;
    import
    org.apache.lucene.index.IndexReader;
    import
    org.apache.lucene.index.Term;
    import
    org.apache.lucene.queryparser.classic.ParseException;
    import
    org.apache.lucene.queryparser.classic.QueryParser;
    import
    org.apache.lucene.search.*;
    import
    org.apache.lucene.store.Directory;
    import
    org.apache.lucene.store.FSDirectory;
    import
    org.wltea.analyzer.lucene.IKAnalyzer;

    import
    java.io.IOException;
    import
    java.nio.file.FileSystems;
    import
    java.nio.file.Path;

    /**
    ?* Created by MoSon on 2017/7/1.
    ?*/
    public class SearchPage {

    ???
    public static void main(String[] args)throwsIOException,ParseException {
    ???????
    //定義索引目錄
    ???????
    Path path = FileSystems.getDefault().getPath("index");
    ???????
    Directory directory = FSDirectory.open(path);
    ???????
    //定義索引查看器
    ???????
    IndexReader indexReader = DirectoryReader.open(directory);
    ???????
    //定義搜索器
    ???????
    IndexSearcher indexSearcher = newIndexSearcher(indexReader);
    ???????
    //搜索內容


    ???????
    //搜索關鍵字
    ???????
    String? keyWords = "內存";

    ????? ??
    //分頁信息
    ???????
    Integer page = 1;
    ???????
    Integer pageSize = 20;
    ???????
    Integer start = (page-1) * pageSize;
    ???????
    Integer end = start + pageSize;

    ???????
    Query query = newQueryParser("sellPoint",newIKAnalyzer()).parse(keyWords);//模糊搜索

    ???????
    //命中前10條文檔
    ???????
    TopDocs topDocs = indexSearcher.search(query,end);//根據end查詢

    ???????
    Integer totalPage = ((topDocs.totalHits/ pageSize) ==0)
    ??????????????? ? topDocs.
    totalHits/pageSize
    ??????????????? : ((topDocs.
    totalHits / pageSize) +1);

    ???????
    System.out.println("“"+ keyWords +"”搜索到"+ topDocs.totalHits
    ???????????????
    + "條數據,頁數:"+ page +"/"+ totalPage);
    ???????
    //打印命中數
    ???????
    System.out.println("命中數:"+topDocs.totalHits);
    ???????
    //取出文檔
    ???????
    ScoreDoc[] scoreDocs = topDocs.scoreDocs;
    ??????? int
    length = scoreDocs.length> end ? end : scoreDocs.length;
    ???????
    //遍歷取出數據
    ???????
    for (inti = start;i < length;i++){
    ??????????? ScoreDoc doc = scoreDocs[i]
    ;
    ???????????
    System.out.println("得分:"+ doc.score);
    ???????????
    Document document = indexSearcher.doc(doc.doc);
    ???????????
    System.out.println("ID:"+ document.get("id"));
    ???????????
    System.out.println("sellPoint:"+document.get("sellPoint"));
    ???????????
    System.out.println("-----------------------");
    ???????
    }

    ???????
    //關閉索引查看器
    ???????
    indexReader.close();
    ???
    }
    }

    效果:

    ?

    6文件索引建立與搜索

    導入一百萬的數據創建索引

    6.1 創建索引

    packagecom.bingo.backstage;

    import
    org.apache.lucene.analysis.Analyzer;
    import
    org.apache.lucene.analysis.standard.StandardAnalyzer;
    import
    org.apache.lucene.document.Document;
    import
    org.apache.lucene.document.Field;
    import
    org.apache.lucene.document.StringField;
    import
    org.apache.lucene.index.IndexWriter;
    import
    org.apache.lucene.index.IndexWriterConfig;
    import
    org.apache.lucene.store.Directory;
    import
    org.apache.lucene.store.FSDirectory;
    import
    org.wltea.analyzer.lucene.IKAnalyzer;

    import
    javax.print.Doc;
    import
    java.io.*;
    import
    java.nio.file.FileSystems;
    import
    java.nio.file.Path;

    import static
    org.apache.lucene.document.TextField.TYPE_STORED;

    /**
    ?* Created by MoSon on 2017/7/4.
    ?*/
    public class ReadTxt {
    ???
    public static void main(String[] args)throwsIOException {
    ??????? Path path = FileSystems.getDefault().getPath(
    "","index");
    ???????
    String extPath = "H:\\IDEAWorkspace\\lucene\\src\\main\\resources\\ext.dic";
    ???????
    Directory directory = FSDirectory.open(path);
    ???????
    //定義分詞器
    //??????? Analyzer analyzer = new StandardAnalyzer();
    ???????
    Analyzer analyzer = newIKAnalyzer();
    ???????
    IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer).setOpenMode(IndexWriterConfig.OpenMode.CREATE);
    ???????
    IndexWriter indexWriter = newIndexWriter(directory,indexWriterConfig);


    ???????
    String filePath = "H:\\myfile\\品高\\茂名全量地址20170401boss+.csv";
    ???????
    FileInputStream fis = newFileInputStream(filePath);
    ???????
    InputStreamReader isr = newInputStreamReader(fis,"GBK");
    ???????
    BufferedReader br = newBufferedReader(isr);
    ???????
    String content;
    ???????
    String levelOne = "";
    ???????
    String levelTwo = "";
    ???????
    String levelThree = "";
    ???????
    String levelFour = "";
    ???????
    String levelFive = "";
    ??????? int
    i = 0;
    ??????
    /* while ((content = br.readLine()) != null){
    ??????????? if (i == 1000) {
    ??????????????? break;
    ??????????? }
    ??????????? String[] split = content.split(",");
    ??????????? String tempOne = "";
    ??????????? String tempTwo = "";
    ??????????? String tempThree = "";
    ??????????? String tempFour = "";
    ??????????? String tempFive = "";
    ??????????? if (i == 1) {
    ??????????????? levelOne = split[2];
    ??????????????? levelTwo = split[3];
    ??????????????? levelThree = split[4];
    ??????????????? levelFour = split[5];
    ??????????????? levelFive = split[6];
    ??????????? }

    ??????????? tempOne = split[2];
    ??????????? tempTwo = split[3];
    ??????????? tempThree = split[4];
    ??????????? tempFour = split[5];
    ??????????? tempFive = split[6];

    ??????????? StringBuilder sb = new StringBuilder();
    ??????????? //
    使用equals如存在""避免放在前面
    ??????????? if (levelOne != null && levelOne != "" && tempOne!= "" && tempOne != null) {
    ??????????????? if(!tempOne.equals(levelOne)) {
    ??????????????????? sb.append("\n" + levelOne);
    ??????????????????? levelOne = tempOne;
    ??????????????????? System.out.println("11" + levelOne+tempOne);
    ??????????????? }
    ??????????? }
    ??????????? if (levelTwo != null && levelTwo != "" && tempTwo!= ""&& tempTwo != null) {
    ??????????????? if(!tempTwo.equals(levelTwo)) {
    ??????????????????? sb.append("\n" + levelTwo);
    ??????????????????? levelTwo = tempTwo;
    ??????????????? }
    ??????????? }
    ??????????? if (levelThree != null && levelThree != ""&& tempThree != ""&& tempThree != null) {
    ??????????????? if(!tempThree.equals(levelThree)) {
    ??????????????????? sb.append("\n" + levelThree);
    ??????????????????? levelThree = tempThree;
    ??????????????? }
    ??????????? }
    ??????????? if (levelFour != null && levelFour != ""&& tempFour != "" && tempFour != null) {
    ??????????????? if(!tempFour.equals(levelFour)) {
    ??????????????????? sb.append("\n" + levelFour);
    ??????????????????? levelFour = tempFour;
    ??????????????? }
    ??????????? }
    ??????????? if (levelFive != null && levelFive != "" && tempFive != "" && tempFive != null) {
    ??????????????? if(!tempFive.equals(levelFive)) {
    ??????????????????? sb.append("\n" + levelFive);
    ??????????????????? levelFive = tempFive;
    ??????????????? }
    ??????????? }
    ??????????? if(i == 422){
    ??????????????? System.out.println("address" + sb.toString()+tempFive+levelFive);
    ??????????? }

    //??????????? System.out.println("address" + sb.toString()+tempFive+levelFive);
    ??????????? if (sb != null){
    ??????????????? //
    以追加的形式寫入
    ???????? ???????FileOutputStream fos = new FileOutputStream(extPath,true);
    ??????????????? OutputStreamWriter osr = new OutputStreamWriter(fos);
    ??????????????? BufferedWriter bw = new BufferedWriter(osr);
    ??????????????? bw.write(sb.toString(),0,sb.length());
    ??? ????????????bw.close();
    ??????????? }
    ??????????? i++;
    ??????? }*/

    ???????
    long start = System.currentTimeMillis();
    ???????
    System.out.println("start:"+ start);
    ??????? while
    ((content = br.readLine()) != null) {
    ???????????
    //第一行不記錄
    ???????????
    /*if(i == 0){
    ??????????????? continue;
    ??????????? }*/
    ?????????? /* if (i == 1000) {
    ??????????????? break;
    ??????????? }*/

    ??????????? //
    定義文檔
    ???????????
    Document document = newDocument();
    ???????????
    //讀取每一行
    //??????????? System.out.println(content);
    ????? ??????
    String[] split = content.split(",");
    ???????????
    String id = split[0];
    ???????????
    String address = split[1];


    //??????????? System.out.println(id + ":" + address);
    ???????????
    document.add(newField("id",id,TYPE_STORED));
    ???????????
    document.add(newField("address",address,TYPE_STORED));
    ???????????
    indexWriter.addDocument(document);
    ???????????
    i++;
    ???????
    }
    ???????
    long end = System.currentTimeMillis();
    ???????
    System.out.println("end:"+ end);
    ??????? float
    time = end - start;
    ???????
    System.out.println("用時:"+ time);
    ???????
    //提交
    ???????
    indexWriter.commit();
    ???????
    //關閉
    ???????
    indexWriter.close();
    ???????
    br.close();
    ???????
    isr.close();
    ???????
    fis.close();
    ???
    }
    }

    6.2 效果

    一開始100秒將一百萬的索引建完。后來逐漸加快,應該跟只開了2個應用程序有關,不到一分鐘就建完了。


    6.3 模糊搜索

    搜索“茂名”,全部命中,一百多萬條。用時1秒多。

    效果:


    7 獲取分詞器分詞結果

    7.1 使用IK分詞器

    想百度那樣,把我們要搜索的一句話先給分詞了再按關鍵字搜索

    代碼:

    packagecom.bingo.backstage;

    import
    org.apache.lucene.analysis.Analyzer;
    import
    org.apache.lucene.analysis.TokenStream;
    import
    org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
    import
    org.wltea.analyzer.lucene.IKAnalyzer;

    import
    java.io.IOException;
    import
    java.io.StringReader;
    import
    java.util.ArrayList;
    import
    java.util.List;

    /**
    ?* Created by MoSon on 2017/7/5.
    ?*/
    public class AnalyzerResult {

    ???
    /**
    ???? *
    獲取指定分詞器的分詞結果
    ????
    * @param analyzeStr
    ????
    *??????????? 要分詞的字符串
    ????
    * @param analyzer
    ????
    *??????????? 分詞器
    ????
    * @return 分詞結果
    ????
    */
    ???
    public List<String>getAnalyseResult(String analyzeStr,Analyzer analyzer) {
    ??????? List<String> response =
    new ArrayList<String>();
    ???????
    TokenStream tokenStream = null;
    ??????? try
    {
    ???????????
    //返回適用于fieldNameTokenStream,標記讀者的內容。
    ???????????
    tokenStream = analyzer.tokenStream("address", newStringReader(analyzeStr));
    ???????????
    // 語匯單元對應的文本
    ???????????
    CharTermAttribute attr = tokenStream.addAttribute(CharTermAttribute.class);
    ???????????
    //消費者在使用incrementToken()開始消費之前調用此方法。
    ???????????
    //將此流重置為干凈狀態。 有狀態的實現必須實現這種方法,以便它們可以被重用,就像它們被創建的一樣。
    ??? ????????
    tokenStream.reset();
    ???????????
    //Consumers(即IndexWriter)使用此方法將流推送到下一個令牌。
    ???????????
    while (tokenStream.incrementToken()) {
    ??????????????? response.add(attr.toString())
    ;
    ???????????
    }
    ??????? }
    catch (IOException e) {
    ??????????? e.printStackTrace()
    ;
    ???????
    } finally{
    ???????????
    if (tokenStream !=null) {
    ???????????????
    try {
    ??????????????????? tokenStream.close()
    ;
    ???????????????
    } catch(IOException e) {
    ??????????????????? e.printStackTrace()
    ;
    ???????????????
    }
    ??????????? }
    ??????? }
    ?? ?????
    return response;
    ???
    }

    ???
    public static void main(String[] args) {
    ??????? List<String> analyseResult =
    new AnalyzerResult().getAnalyseResult("茂名市信宜市丁堡鎮丁堡鎮片區丁堡街道181301", new IKAnalyzer());
    ??????? for
    (String result : analyseResult){
    ??????????? System.
    out.println(result);
    ???????
    }
    ??? }
    }

    分詞效果


    7.2 使用內置CJK分詞器

    把類中的IKAnalyzer替換為CJKAnalyzer就可以了


    分詞效果:


    基本以兩個字兩個字來劃分,沒有IK分詞器的效果好。

    8???進階

    根據前面的知識結合起來,先分詞,根據關鍵詞搜索。相似度高的靠前輸出。

    使用的是布爾搜索。

    代碼:

    package com.bingo.backstage;import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; import org.apache.lucene.document.Document; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Term; import org.apache.lucene.queryparser.classic.ParseException; import org.apache.lucene.search.*; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.wltea.analyzer.lucene.IKAnalyzer;import java.io.IOException; import java.io.StringReader; import java.nio.file.FileSystems; import java.nio.file.Path; import java.util.ArrayList; import java.util.List;/*** Created by MoSon on 2017/7/5.*/public class BooleanSearchQuery {public static void main(String[] args) throws IOException, ParseException {long start = System.currentTimeMillis();System.out.println("開始時間:" + start);//定義索引目錄Path path = FileSystems.getDefault().getPath("index");Directory directory = FSDirectory.open(path);//定義索引查看器IndexReader indexReader = DirectoryReader.open(directory);//定義搜索器IndexSearcher indexSearcher = new IndexSearcher(indexReader);//搜索內容//定義查詢字段//布爾搜索/*?? TermQuery termQuery1 = new TermQuery(term1);TermQuery termQuery2 = new TermQuery(term2);BooleanClause booleanClause1 = new BooleanClause(termQuery1, BooleanClause.Occur.MUST);BooleanClause booleanClause2 = new BooleanClause(termQuery2, BooleanClause.Occur.SHOULD);BooleanQuery.Builder builder = new BooleanQuery.Builder();builder.add(booleanClause1);builder.add(booleanClause2);BooleanQuery query = builder.build();*//*** 進階*多關鍵字的布爾搜索* *///定義Term集合List<Term> termList = new ArrayList<Term>();//獲取分詞結果List<String> analyseResult = new AnalyzerResult().getAnalyseResult("信宜市1234ewrq13asd丁堡鎮丁堡鎮片區丁堡街道181301", new IKAnalyzer());for (String result : analyseResult){termList.add(new Term("address",result));//??????????? System.out.println(result);}//定義TermQuery集合List<TermQuery> termQueries = new ArrayList<TermQuery>();//取出集合結果for(Term term : termList){termQueries.add(new TermQuery(term));}List<BooleanClause> booleanClauses = new ArrayList<BooleanClause>();//遍歷for (TermQuery termQuery : termQueries){booleanClauses.add(new BooleanClause(termQuery, BooleanClause.Occur.SHOULD));}BooleanQuery.Builder builder = new BooleanQuery.Builder();for (BooleanClause booleanClause : booleanClauses){builder.add(booleanClause);}//檢索BooleanQuery query = builder.build();//命中前10條文檔TopDocs topDocs = indexSearcher.search(query,20);//打印命中數System.out.println("命中數:"+topDocs.totalHits);//取出文檔ScoreDoc[] scoreDocs = topDocs.scoreDocs;//遍歷取出數據for (ScoreDoc scoreDoc : scoreDocs){float score = scoreDoc.score; //相似度System.out.println("相似度:"+ score);//通過indexSearcherdoc方法取出文檔Document doc = indexSearcher.doc(scoreDoc.doc);System.out.println("id:"+doc.get("id"));System.out.println("address:"+doc.get("address"));}//關閉索引查看器indexReader.close();long end = System.currentTimeMillis();System.out.println("開始時間:" + end);long time =? end-start;System.out.println("用時:" + time + "毫秒" );}/*** 獲取指定分詞器的分詞結果* @param analyzeStr*??????????? 要分詞的字符串* @param analyzer*??????????? 分詞器* @return 分詞結果*/public List<String> getAnalyseResult(String analyzeStr, Analyzer analyzer) {List<String> response = new ArrayList<String>();TokenStream tokenStream = null;try {//返回適用于fieldNameTokenStream,標記讀者的內容。tokenStream = analyzer.tokenStream("address", new StringReader(analyzeStr));// 語匯單元對應的文本CharTermAttribute attr = tokenStream.addAttribute(CharTermAttribute.class);//消費者在使用incrementToken()開始消費之前調用此方法。//將此流重置為干凈狀態。 有狀態的實現必須實現這種方法,以便它們可以被重用,就像它們被創建的一樣。tokenStream.reset();//Consumers(即IndexWriter)使用此方法將流推送到下一個令牌。while (tokenStream.incrementToken()) {response.add(attr.toString());}} catch (IOException e) {e.printStackTrace();} finally {if (tokenStream != null) {try {tokenStream.close();} catch (IOException e) {e.printStackTrace();}}}return response;} }

    效果:

    輸入的句子是


    檢索結果:

    ?

    ?

    ?在此入門到此結束,如有興趣可以查看進階版,可以看底部的“我的更多文章”。

    ?

    ?

    ?

    ?

    總結

    以上是生活随笔為你收集整理的Lucene从入门到进阶(6.6.0版本)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    国产剧情一区 | 91免费高清在线观看 | 99爱在线观看 | 中文字幕在线看视频国产中文版 | 国产精品久久久久久久久免费 | 日韩视频免费 | 在线观看视频黄 | 亚洲视频在线观看网站 | 日韩欧美网址 | 国产成人精品综合久久久久99 | 久久成人国产精品免费软件 | 在线视频福利 | av黄色大片| 久久免费国产 | 中日韩三级视频 | 在线观看网站黄 | 日韩网站在线免费观看 | 国产一区视频导航 | 豆豆色资源网xfplay | 国产精品高潮呻吟久久av无 | 三级性生活视频 | 激情av五月婷婷 | 精品国产视频一区 | 五月天视频网站 | 97在线视频免费播放 | 精品视频一区在线 | 激情视频在线观看网址 | 亚洲波多野结衣 | 精品一区二区在线播放 | 国内精品美女在线观看 | 日韩大片在线看 | 免费视频久久久久久久 | 亚洲一二三区精品 | 国产精品久久久久久一二三四五 | 超薄丝袜一二三区 | 97国产情侣爱久久免费观看 | 国内揄拍国产精品 | 日本不卡一区二区 | 亚洲精品美女久久久久 | 中文字幕丰满人伦在线 | 国产黄免费 | 亚洲精品永久免费视频 | 在线观看一区二区视频 | 国产精品成久久久久三级 | 亚洲综合少妇 | 一区二区伦理 | 综合久久精品 | 99热在线国产 | 在线免费高清一区二区三区 | 婷婷丁香久久五月婷婷 | 91av成人| 大荫蒂欧美视频另类xxxx | av中文字幕免费在线观看 | 夜色成人网 | 深夜视频久久 | 国产视频久久 | 夜色成人网 | 国产精选在线观看 | 黄色av影院 | 成人在线播放免费观看 | free,性欧美| 日韩免费视频在线观看 | 成年在线观看 | 激情丁香综合 | 亚洲精品中文在线 | 亚洲九九精品 | 国产精品午夜免费福利视频 | 国产麻豆精品久久 | 日韩三级在线观看 | 青青草华人在线视频 | 在线韩国电影免费观影完整版 | 色综合天天综合 | 久久精品综合 | 日本成址在线观看 | 97视频资源| 国产中文字幕在线观看 | 97精品久久人人爽人人爽 | 最新亚洲视频 | 久久公开视频 | 深夜成人av | 天天躁日日躁狠狠躁 | 天天操天天操天天操天天操天天操天天操 | 91精品在线免费观看 | 成年人免费看片网站 | 国产一区二区综合 | 波多野结衣在线观看一区 | 精品成人免费 | zzijzzij亚洲成熟少妇 | 蜜臀av夜夜澡人人爽人人桃色 | 亚洲美女免费视频 | 在线观看日本高清mv视频 | 91久久国产露脸精品国产闺蜜 | 狠狠色丁香久久综合网 | 欧美日韩中 | 久久综合色一综合色88 | 国产97视频在线 | 99在线热播精品免费 | 91传媒在线看 | 91福利社区在线观看 | 国产午夜精品视频 | 欧美成人播放 | 深爱婷婷网 | 91av视频在线免费观看 | 丁香六月婷婷 | 中文字幕网址 | 最新极品jizzhd欧美 | 亚洲影视资源 | 特黄一级毛片 | 色婷婷激情综合 | 国产精品久久久久久久免费 | 人人干在线观看 | 久久久久久久久久久影院 | 久久人人做 | 精品av在线播放 | 色综合久久88色综合天天 | 美女国产在线 | 中文字幕av最新 | 欧美狠狠色| 福利久久| 日日日天天天 | 六月丁香激情综合 | 五月婷婷丁香激情 | 手机av永久免费 | av在线最新 | 欧美日韩xx | 国产亚洲免费的视频看 | 六月天综合网 | 伊人永久 | 国产精品一区在线观看你懂的 | 亚洲一级黄色av | 久久免费观看少妇a级毛片 久久久久成人免费 | 国产v视频 | 91亚·色| 天天做天天爽 | 中文字幕视频观看 | 国产日韩欧美在线播放 | 黄色天堂在线观看 | 日韩成人免费观看 | 国色综合 | 亚洲综合五月 | 特级毛片网站 | 国产麻豆精品一区二区 | 国产美女免费看 | 久久午夜网 | 黄色三级在线观看 | 91在线看免费 | 婷婷亚洲激情 | 亚洲欧美日韩在线一区二区 | 天天综合网入口 | 国产又粗又猛又黄又爽 | 久久成人资源 | 国产精品成人一区二区三区 | 2018精品视频| 天天操天天操 | 九九久久精品视频 | 91精品999| 成人av在线观 | 亚洲黄色大片 | 91精品久久久久久久久久久久久 | 精品国产一区二区三区久久 | 国产最新在线观看 | 亚洲精品成人 | 精品99999 | 久久视频这里只有精品 | 日韩黄在线观看 | 色综合天天色综合 | 91精品视频免费在线观看 | 欧美日韩在线观看一区二区三区 | 日本一区二区免费在线观看 | 亚洲精品午夜视频 | 五月天激情综合网 | 亚洲 中文 在线 精品 | 久久精品久久99 | 国产一区私人高清影院 | 99成人在线视频 | 草在线视频 | 久久久久欠精品国产毛片国产毛生 | 久久久久久久久久久成人 | 欧美成人在线免费 | 91九色在线播放 | 国产 视频 久久 | 日韩免费一区 | 丁香综合| 国产精品免费一区二区三区 | 久草在线一免费新视频 | 日韩欧美综合精品 | 久久高清片 | 成人宗合网 | 黄色一级在线观看 | 干干操操| 欧美a免费| 色综合久久中文综合久久牛 | 国产综合在线视频 | 黄色高清视频在线观看 | 欧美一区二区三区在线视频观看 | 久久国产精品区 | 亚洲乱码在线观看 | 国产精品毛片一区二区 | 国产精品一区二区三区在线播放 | 狠狠躁日日躁狂躁夜夜躁av | 日韩欧美在线综合网 | 欧美性大胆 | 免费网址你懂的 | 在线观看播放av | 日韩视频1 | 综合久久久| 国产高清在线视频 | 日韩三区在线 | 91福利影院在线观看 | 激情综合网在线观看 | 在线观看网站你懂的 | 欧美成人区 | 免费观看版| 欧美日韩久久久 | 少妇bbw搡bbbb搡bbbb | 伊人成人激情 | 久久这里只有精品23 | 最新av在线播放 | 色偷偷888欧美精品久久久 | 97在线视频免费播放 | 五月婷婷综合在线观看 | 美女精品国产 | 久久视频99 | 日日操操 | 区一区二区三区中文字幕 | 免费在线观看成年人视频 | 97国产精品久久 | 国产 精品 资源 | 毛片区 | 丁香婷婷综合网 | 久久伦理 | 黄a在线| 国产精成人品免费观看 | 粉嫩一区二区三区粉嫩91 | 国产黄a三级三级三级三级三级 | 中文字幕第一页在线 | 亚洲国产资源 | 久久久国产精品人人片99精片欧美一 | 99精品国产在热久久下载 | 久久人人爽人人爽人人 | 久久av免费| 色综合中文综合网 | 日韩高清免费在线 | 成人久久久电影 | 首页中文字幕 | 久久久国产网站 | 久久99亚洲精品久久 | 国产丝袜网站 | 九色精品免费永久在线 | 亚洲国产中文在线 | 免费一级特黄录像 | 久久精品99视频 | 97国产在线| 中文字幕一区二区三区在线播放 | av网站免费在线 | 毛片网在线| 精品久久99 | 国产精品久久久久久高潮 | 天天综合网天天 | 久草视频免费在线播放 | 成人久久18免费 | 欧美巨大 | 99在线观看 | 在线看片日韩 | 亚洲视频 中文字幕 | 久久第四色 | 九九热av | 亚洲最大的av网站 | 国产淫片 | 国产一区二区网址 | 免费h在线观看 | 欧美 日韩 性 | 国产美女精品人人做人人爽 | 亚洲国产精品成人女人久久 | 中文字幕在线视频免费播放 | 国产一区二区在线免费 | 久草在线资源观看 | 亚洲视频久久久 | 免费成人黄色av | 亚洲久久视频 | 亚洲精品综合一二三区在线观看 | avav片| 久久九九精品 | 天天干人人 | 亚洲天天 | 日韩有码在线观看视频 | 日本久久成人中文字幕电影 | 五月婷婷网站 | 久操视频在线免费看 | 国产精品免费在线播放 | 亚洲精品免费在线观看视频 | 国产一区二区在线免费播放 | 最近中文字幕在线 | 亚洲国产精品推荐 | 九九视频一区 | 日韩啪啪小视频 | 久久精精品视频 | 岛国av在线不卡 | 手机在线观看国产精品 | 日韩欧美xxx | 91av在线免费播放 | 国产精品99久久免费黑人 | 久草网免费| 国产亚洲视频在线观看 | 麻豆精品在线视频 | 亚洲精品在线国产 | 久久久人 | 久草www | 少妇bbw撒尿 | 精品久久久久国产 | 免费看黄20分钟 | 国产中文欧美日韩在线 | 丁香色婷 | 91在线九色| 国产精品18久久久久久久久久久久 | av看片在线观看 | 久久久伊人网 | 中文字幕在线观看第二页 | 亚洲精品大全 | 色吧久久 | 91精品在线播放 | 国产成人精品999在线观看 | 久久久91精品国产 | 91在线免费播放视频 | 免费观看xxxx9999片 | 99国内精品久久久久久久 | 中文字幕观看视频 | 久99久精品| 99se视频在线观看 | 99精品在这里 | 日韩av免费在线看 | 欧美日韩高清一区 | 国产精品入口66mio女同 | 久久久高清免费视频 | 在线亚洲精品 | 久久精品99国产精品亚洲最刺激 | 国产精品6 | 日本字幕网 | 免费激情网 | 韩国精品视频在线观看 | 国产视频精品免费播放 | 91一区啪爱嗯打偷拍欧美 | 日韩精品影视 | 久久99国产精品久久99 | 日韩久久久久久 | 中文字幕丝袜美腿 | 成人动态视频 | 国产成人精品久久久 | 成人中心免费视频 | 久久久黄色av| 狠狠综合久久 | 黄网站色成年免费观看 | 免费av网站观看 | 国产精品av免费在线观看 | 久久狠狠亚洲综合 | 日韩精品一区二区三区第95 | 久久av中文字幕片 | 日韩区在线观看 | 色婷婷国产精品一区在线观看 | 久产久精国产品 | avav片| 久久精品国产精品亚洲精品 | 麻豆视频一区 | 久久久午夜精品福利内容 | 久久刺激视频 | 最近在线中文字幕 | 狠狠躁夜夜a产精品视频 | 夜夜躁狠狠躁 | av黄色影院 | 91少妇精拍在线播放 | 97在线观看免费视频 | 中文字幕成人 | 欧美一级爽| 日韩精品在线免费观看 | 欧美成人区 | 欧美日韩国产免费视频 | 国产精品岛国久久久久久久久红粉 | 免费欧美精品 | 国产精品久久久久永久免费 | 日日碰狠狠添天天爽超碰97久久 | 日日干日日操 | 天天色视频 | 又黄又爽又刺激 | 最近中文字幕国语免费av | 国内精品在线观看视频 | 韩国在线一区二区 | 五月婷婷深开心 | 亚洲一区日韩精品 | 国内精品久久久久久中文字幕 | 免费视频网 | 中文字幕亚洲欧美日韩2019 | 久久久综合香蕉尹人综合网 | 天天爽夜夜爽人人爽一区二区 | 天天躁日日躁狠狠 | 成人av在线直播 | 欧美成人日韩 | 国产视频在线观看免费 | 日韩一二区在线观看 | 亚洲视频 一区 | 超碰国产在线 | 婷婷在线精品视频 | 91高清免费在线观看 | 黄色在线视频网址 | 精品国产一区二区三区四 | 不卡的av片 | 欧美精品xxx | 最新国产一区二区三区 | 一区二区三区中文字幕在线观看 | 激情婷婷欧美 | 激情大尺度视频 | 9在线观看免费高清完整版 玖玖爱免费视频 | 夜夜躁日日躁狠狠躁 | 婷婷五月情 | 欧美日韩不卡在线观看 | 成人在线免费看视频 | 国产精品不卡在线播放 | www.在线看片.com | 久久精品79国产精品 | 99视频在线观看一区三区 | 国产精品成人久久久久久久 | 少妇高潮流白浆在线观看 | 国产精品一区在线 | 97超级碰碰碰碰久久久久 | 久久视频免费在线观看 | 国产精品wwwwww| 97视频在线观看免费 | 国产精品第52页 | 亚洲九九九在线观看 | 青春草免费在线视频 | 免费观看一区二区三区视频 | 欧美一二区在线 | 狠狠干夜夜爱 | 日韩美精品视频 | 麻豆传媒视频在线播放 | 激情开心站 | av官网在线| 国产第一页福利影院 | 中文字幕亚洲综合久久五月天色无吗'' | 国产丝袜美腿在线 | 欧美日韩免费网站 | 天天超碰 | 最新日韩中文字幕 | 免费h精品视频在线播放 | 国产精品一区二区三区在线播放 | 久久精品99 | 中文字幕国产精品 | 中文字幕文字幕一区二区 | 特级西西人体444是什么意思 | 9在线观看免费高清完整版在线观看明 | 久久九九免费 | 成人在线播放av | 天天干.com | 狠狠干2018| 黄色软件在线观看 | 亚洲在线综合 | 国产精品福利无圣光在线一区 | 国产在线观看你懂的 | 亚洲精品在线一区二区三区 | 91xav| 深夜福利视频一区二区 | 免费高清在线视频一区· | 婷婷六月天天 | 亚洲精品美女免费 | 中文字幕91| 国产手机免费视频 | 亚洲成av人片在线观看香蕉 | 精品国产一区二区三区久久久 | 911香蕉视频 | 精品国产免费看 | 黄色福利| 欧美日韩精品免费观看视频 | 一区二区三区动漫 | 久久综合九九 | 欧美日韩精品在线一区二区 | 国产一级在线 | 91久久久久久国产精品 | 日本精品视频免费观看 | 日日射av| 欧美一级片免费观看 | 狠狠天天| 毛片一级免费一级 | 在线观看免费福利 | 久久99久久99精品免视看婷婷 | av黄色免费在线观看 | 在线国产一区二区 | 综合色中文| 一级免费片 | 日本最新高清不卡中文字幕 | 亚洲人视频在线 | 超碰97国产精品人人cao | 日韩欧美综合视频 | av电影免费在线播放 | 色综合久久精品 | 国产无遮挡又黄又爽馒头漫画 | 久久综合九色九九 | 一本一道久久a久久综合蜜桃 | 精品福利片 | 日韩免费一区二区 | 日韩理论在线视频 | avsex| 久久免费精品国产 | 爱av在线网 | 热久久精品在线 | 午夜三级在线 | 国产精品久久久一区二区三区网站 | 免费午夜av| 夜夜骑天天操 | 成年人在线电影 | 99九九免费视频 | 成人av在线直播 | 伊人影院在线观看 | 国产.精品.日韩.另类.中文.在线.播放 | 三级av免费观看 | av直接看| 久久久免费观看视频 | 久久天天躁夜夜躁狠狠躁2022 | 国产另类xxxxhd高清 | av看片网址| 午夜精品久久久久久久爽 | 97精品国产aⅴ | 日本特黄一级片 | 中文字幕一区在线观看视频 | 日韩特级毛片 | 久精品视频在线观看 | 一区二区av| 天天操夜夜做 | 成人久久18免费网站麻豆 | 欧美日韩国产在线一区 | 欧美日韩在线精品 | 97成人在线观看视频 | 久久免费黄色大片 | 四虎5151久久欧美毛片 | 日本精品二区 | 国产我不卡| 波多野结衣视频在线 | 久久久久久网 | 久久99久久精品 | 欧美乱码精品一区二区 | 国产精品18久久久久久久网站 | 国产黄色理论片 | 日韩久久精品一区二区三区下载 | 国产成人资源 | 91九色性视频 | 黄p网站在线观看 | 欧美色就是色 | 久久国产精品免费视频 | 久久麻豆精品 | 福利网在线 | 婷婷久久国产 | 国产三级在线播放 | www五月婷婷| 国产精品午夜久久 | 日韩精品在线一区 | 精品亚洲网 | 久久天天操 | 999色视频 | 久久综合免费视频 | 久久黄色免费视频 | 亚洲欧美日韩一级 | 91九色视频在线播放 | 亚洲欧美日韩精品久久久 | 日日干夜夜干 | av动态图片 | 最近的中文字幕大全免费版 | 国产超碰97 | 久久久99精品免费观看 | 狠狠色综合网站久久久久久久 | 天天草夜夜 | 91成人在线视频观看 | 91夫妻视频 | 国产一级一级国产 | 亚州av一区 | 蜜臀精品久久久久久蜜臀 | 精品国产一区二区三区四区vr | 狠狠干狠狠艹 | 亚洲人在线7777777精品 | 国产精品久久久久久久久久久免费 | 国产精品视频地址 | 色就色,综合激情 | 制服丝袜欧美 | 中文有码在线视频 | 国产福利在线免费 | 日韩高清在线一区二区三区 | 亚洲视频电影在线 | 国产精品影音先锋 | 久久精品视频18 | 欧美性粗大hdvideo | 天堂网av在线 | 免费观看成年人视频 | 欧美在线视频日韩 | 狠狠色噜噜狠狠狠合久 | av免费网站在线观看 | 国产精品视频免费在线观看 | 久久五月精品 | 久久超级碰视频 | 精品国产欧美一区二区三区不卡 | 亚州精品视频 | 91麻豆精品91久久久久同性 | 亚洲伦理一区 | 亚洲永久国产精品 | 欧美精品久久人人躁人人爽 | 久久国产综合视频 | 亚一亚二国产专区 | 久久久九色精品国产一区二区三区 | 操操操com | 免费看的黄色网 | 久久久久久免费毛片精品 | 伊人va| 日韩高清片| 久久久精华网 | 成人黄色小说在线观看 | 在线看一区 | 欧美日韩亚洲第一页 | 亚洲激情校园春色 | 麻豆视频在线免费 | 日日草夜夜操 | 久久精品一区二区三区中文字幕 | 亚洲成人免费观看 | av免费看电影 | 麻豆传媒电影在线观看 | 亚洲第一av在线 | 福利视频一区二区 | 日本中文字幕在线电影 | 久久午夜鲁丝片 | 中文字幕在线观看你懂的 | 久久久久久久久久伊人 | 欧美精彩视频 | 综合五月 | 激情深爱五月 | 亚洲精品视频免费在线观看 | 国产999久久久 | av在线影视 | 在线观看视频在线观看 | 日韩理论片中文字幕 | 友田真希av | 国产成人精品久久久 | 国产成人精品免高潮在线观看 | www.色午夜 | 93久久精品日日躁夜夜躁欧美 | 国产中出在线观看 | 二区三区中文字幕 | av看片网址 | 伊人手机在线 | 久久天堂影院 | 欧美人人爱 | 日韩在线首页 | 99国产成+人+综合+亚洲 欧美 | 成人超碰在线 | 亚洲一区日韩 | 日韩精品专区在线影院重磅 | 最近字幕在线观看第一季 | 国产精品第二页 | 国产一区在线免费观看 | 日韩成人高清在线 | 射射射综合网 | 婷婷色在线资源 | 日韩欧美一二三 | 中文字幕丝袜美腿 | 精品五月天 | 波多野结衣在线观看一区二区三区 | 日韩精品一区二区在线视频 | 婷婷六月天在线 | 国产精品久久人 | 午夜视频不卡 | 国产精品午夜久久久久久99热 | 成人黄色电影免费观看 | 91成人免费视频 | 欧美午夜精品久久久久 | 91超级碰碰 | 久久精品久久久精品美女 | 99中文字幕 | avsex| 久草在线视频在线观看 | 亚洲天堂网视频 | 日韩最新理论电影 | 夜夜看av| 五月天婷婷在线观看视频 | 免费一级特黄毛大片 | 天天操天天综合网 | 男女啪啪免费网站 | 久草色在线观看 | 日韩亚洲国产中文字幕 | 国产精品一区二区av日韩在线 | 一本色道久久精品 | 日韩欧美视频在线播放 | 国产第页 | 国产成人精品一区在线 | 日韩在线三区 | 欧美国产精品久久久久久免费 | 黄色tv视频 | 黄色亚洲精品 | 欧美xxxxx在线视频 | 欧美一区二区三区免费看 | 国产一区福利在线 | 97超碰资源总站 | 美女激情影院 | 国产精品不卡 | 久久久久麻豆 | 超碰人人91| 久久免费毛片视频 | 亚洲成aⅴ人在线观看 | 人人澡人摸人人添学生av | 国产青春久久久国产毛片 | 久久综合久久久久88 | 69xx视频 | 久久在线电影 | 精品黄色在线 | 国产在线视频一区二区三区 | 色狠狠综合天天综合综合 | www色,com| 成人午夜电影网站 | 久热精品国产 | 久久成人国产 | 最新影院 | 超碰激情在线 | 日韩高清毛片 | 国产精品自产拍在线观看网站 | 69成人在线| 久久精品激情 | av资源中文字幕 | 欧美午夜视频在线 | 精品久久久久免费极品大片 | 91看片看淫黄大片 | 波多野结衣在线视频免费观看 | 最近更新中文字幕 | 二区三区中文字幕 | 日本精品视频在线 | 亚洲中字幕| 99热九九这里只有精品10 | 国产福利免费在线观看 | 国产色小视频 | 久久久久成人精品亚洲国产 | 91精品视屏 | 国产黄色视 | 久久视频一区二区 | 在线成人短视频 | .精品久久久麻豆国产精品 亚洲va欧美 | 国产精品1000 | 成人av影视 | 91香蕉视频720p| 91在线日韩 | 亚洲综合在线五月天 | 亚洲黄a| 国产97在线观看 | 99久久精品午夜一区二区小说 | 国产精品不卡在线 | 国产午夜精品一区 | 国产视频中文字幕在线观看 | 99久久久国产精品 | 在线观看午夜av | 国产精品99久久久久久久久 | 久久综合欧美 | av天天干| 在线看片视频 | 国产黄色资源 | 欧美 日韩 国产 中文字幕 | 成人app在线播放 | 国产在线观看免费观看 | 国产精品a成v人在线播放 | 日韩在线观看你懂的 | 婷婷色中文字幕 | 久久久久国产精品厨房 | 国产成人在线一区 | 国产一区二区免费 | www.亚洲精品视频 | 超碰人人草人人 | 丁香婷婷电影 | 麻豆传媒视频观看 | 激情网在线视频 | 日韩av男人的天堂 | 国产精品久久久久永久免费观看 | av高清网站在线观看 | 国产手机在线 | 在线高清一区 | 国产一级电影免费观看 | 午夜精品电影一区二区在线 | 亚洲最大av网站 | 国产一级三级 | 婷婷久久网 | 国产精品久久电影网 | 日韩欧美在线高清 | 夜夜操天天干, | 精品视频久久久久久 | 一区二区三区 中文字幕 | 午夜精品中文字幕 | 国产精品久久久久久久免费 | 99精品一级欧美片免费播放 | 亚洲成aⅴ人片久久青草影院 | 久久综合偷偷噜噜噜色 | 日韩视频中文 | 久久久久国产一区二区 | 国产资源网站 | 精品一二三四视频 | 成人网页在线免费观看 | 在线观看一区 | 日韩欧美在线不卡 | 九九有精品 | 亚洲欧美色婷婷 | 国产亚洲精品bv在线观看 | 久久免费视频网 | 色婷婷狠 | 久草视频中文在线 | 日韩高清 一区 | 亚洲成a人片77777潘金莲 | 99久久久久久 | 久久蜜桃av | 超碰在线人人爱 | 国产精品久久久久久久久久白浆 | 精品国产亚洲一区二区麻豆 | 国产一及片 | 九九视频精品在线 | 久久国产香蕉视频 | 黄色片网站大全 | 91看片淫黄大片在线播放 | 免费看在线看www777 | 国产高清av | а天堂中文最新一区二区三区 | 亚洲国产精品一区二区久久,亚洲午夜 | 精品v亚洲v欧美v高清v | 精品国精品自拍自在线 | 日韩欧美在线视频一区二区三区 | 91精品国产入口 | 成年人免费在线观看 | 欧美一性一交一乱 | 欧美一级片免费观看 | 成年人av在线播放 | 干干日日 | 欧美色图另类 | 亚洲精品国产拍在线 | 国产精品99久久久精品免费观看 | 91人人人 | 91视频a | 九九久久国产 | av中文字幕免费在线观看 | 又黄又爽的视频在线观看网站 | 国产九九九九九 | 999久久久免费视频 午夜国产在线观看 | 一区二区三区av在线 | 国产福利91精品一区 | 国产黄色在线网站 | av福利在线免费观看 | 久久午夜网 | 97网| 国产69久久| 狠狠操天天射 | 亚洲波多野结衣 | 91成人精品国产刺激国语对白 | 伊色综合久久之综合久久 | 天天干,天天插 | 久久国产一二区 | 亚洲黄色在线 | 美女网站免费福利视频 | 久久精品久久精品久久精品 | 国产视频综合在线 | 久久免费福利视频 | 黄网站色 | 国产1级视频 | 国产一区不卡在线 | 免费观看十分钟 | 干天天| 天天色天天操天天爽 | 欧美亚洲国产日韩 | 视频一区在线播放 | 91精品在线免费 | 美女黄网久久 | 国产在线美女 | 视频福利在线 | av超碰在线 | 日韩视频一区二区在线观看 | 97超碰福利久久精品 | 欧美精品一级视频 | 久久99国产精品自在自在app | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 91九色在线播放 | 日韩欧美在线视频一区二区三区 | 久久久久久久久久亚洲精品 | a在线免费观看视频 | 久久午夜影院 | 免费一级片在线 | 欧美大码xxxx | 午夜少妇av | 手机看国产毛片 | 97国产在线视频 | 中文av网站| 久久久999| 欧美人牲| 中午字幕在线观看 | 蜜臀av性久久久久av蜜臀妖精 | 欧美色综合久久 | 亚洲第一区精品 | 久久久精品福利视频 | 99久久er热在这里只有精品15 | 亚洲综合网站在线观看 | 亚洲精品国产精品国产 | 97涩涩视频| 黄色亚洲片 | 精品久久五月天 | 久久人人爽人人爽人人片av免费 | 91av手机在线观看 | 骄小bbw搡bbbb揉bbbb | 99在线免费观看视频 | 色噜噜日韩精品欧美一区二区 | 香蕉网站在线观看 | 国产高清av免费在线观看 | 久久人人97超碰com | av福利免费| 亚洲国产三级在线 | 日韩欧美在线观看一区二区 | 亚洲第一中文字幕 | av网站有哪些 | 婷婷综合久久 | 午夜性色 | 成人禁用看黄a在线 | 天天爱天天操 | av丝袜制服| 欧美一区二区视频97 | 九九亚洲视频 | 国产日韩av在线 | 久久久久久久99 | 中文av不卡 | 中文字幕久久精品一区 | 欧美日韩调教 | 国产精品成久久久久 | 91精品日韩 | av成人免费在线观看 | 久久影院中文字幕 | 美女视频黄色免费 | 婷婷中文字幕 | 免费色网| 免费黄色特级片 | 人人舔人人射 | 97精品欧美91久久久久久 | 91九色精品女同系列 | 久久亚洲欧美日韩精品专区 | 国产成人在线看 | 国产91区| 久久99久久99精品免观看软件 | 午夜国产影院 | 国产精品婷婷午夜在线观看 | av免费看av | 超碰国产97 | 中文字幕有码在线 | 国产自产在线视频 | 亚洲精品18p | 成人黄色毛片 | 国产成人高清在线 | 欧美久久成人 | 伊人伊成久久人综合网站 | av网站手机在线观看 | 国产高清免费观看 | www.婷婷色 | 成人av电影在线播放 | 91精品国产麻豆国产自产影视 | 激情视频免费在线观看 | 久久视频中文字幕 | 在线观看一区 | 黄色一级免费网站 | 日韩毛片一区 | 国产午夜在线观看 | 亚洲高清在线精品 | 97国产在线 | 欧美另类交在线观看 | 99看视频在线观看 | 成人va在线观看 | 国产精品久久久久久久久久久免费 | 最新三级在线 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 91麻豆精品 | 日韩91av | 五月开心婷婷 | 久久久久久久久久久久99 | 亚洲a资源 | www日韩在线 | 久久久久久久久久久久久影院 | 精品99在线观看 | www色网站 | 一区二区 不卡 | 久久夜色精品国产欧美乱极品 | 日本在线观看一区二区 | 一区二区三区日韩精品 | 中文字幕丝袜制服 | 中文字幕国产精品一区二区 | av激情五月 | 国产精品一区二区三区久久 | 久久福利小视频 | 免费精品视频在线 | 精品国产一区二区三区在线 | 免费婷婷| 欧美孕妇与黑人孕交 | 亚洲另类在线视频 | 国产一区电影在线观看 | 国产天天爽| 成人 国产 在线 | 欧美日韩一区二区在线观看 | 亚洲欧洲成人精品av97 | 亚洲一级性 | 欧美淫视频 | 亚洲精品1234区 |