青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

為生存而奔跑

   :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
  271 Posts :: 0 Stories :: 58 Comments :: 0 Trackbacks

留言簿(5)

我參與的團(tuán)隊(duì)

搜索

  •  

積分與排名

  • 積分 - 331736
  • 排名 - 74

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

轉(zhuǎn):http://www.ibm.com/developerworks/cn/java/j-lo-lucene1/
本文首先介紹了Lucene的一些基本概念,然后開(kāi)發(fā)了一個(gè)應(yīng)用程序演示了利用Lucene建立索引并在該索引上進(jìn)行搜索的過(guò)程。

Lucene 簡(jiǎn)介

Lucene 是一個(gè)基于 Java 的全文信息檢索工具包,它不是一個(gè)完整的搜索應(yīng)用程序,而是為你的應(yīng)用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一個(gè)開(kāi)源項(xiàng)目。也是目前最為流行的基于 Java 開(kāi)源全文檢索工具包。

目前已經(jīng)有很多應(yīng)用程序的搜索功能是基于 Lucene 的,比如 Eclipse 的幫助系統(tǒng)的搜索功能。Lucene 能夠?yàn)槲谋绢愋偷臄?shù)據(jù)建立索引,所以你只要能把你要索引的數(shù)據(jù)格式轉(zhuǎn)化的文本的,Lucene 就能對(duì)你的文檔進(jìn)行索引和搜索。比如你要對(duì)一些 HTML 文檔,PDF 文檔進(jìn)行索引的話你就首先需要把 HTML 文檔和 PDF 文檔轉(zhuǎn)化成文本格式的,然后將轉(zhuǎn)化后的內(nèi)容交給 Lucene 進(jìn)行索引,然后把創(chuàng)建好的索引文件保存到磁盤或者內(nèi)存中,最后根據(jù)用戶輸入的查詢條件在索引文件上進(jìn)行查詢。不指定要索引的文檔的格式也使 Lucene 能夠幾乎適用于所有的搜索應(yīng)用程序。

圖 1 表示了搜索應(yīng)用程序和 Lucene 之間的關(guān)系,也反映了利用 Lucene 構(gòu)建搜索應(yīng)用程序的流程:


圖1. 搜索應(yīng)用程序和 Lucene 之間的關(guān)系
圖1. 搜索應(yīng)用程序和 Lucene 之間的關(guān)系 




回頁(yè)首


索引和搜索

索引是現(xiàn)代搜索引擎的核心,建立索引的過(guò)程就是把源數(shù)據(jù)處理成非常方便查詢的索引文件的過(guò)程。為什么索引這么重要呢,試想你現(xiàn)在要在大量的文檔中搜索含有某個(gè)關(guān)鍵詞的文檔,那么如果不建立索引的話你就需要把這些文檔順序的讀入內(nèi)存,然后檢查這個(gè)文章中是不是含有要查找的關(guān)鍵詞,這樣的話就會(huì)耗費(fèi)非常多的時(shí)間,想想搜索引擎可是在毫秒級(jí)的時(shí)間內(nèi)查找出要搜索的結(jié)果的。這就是由于建立了索引的原因,你可以把索引想象成這樣一種數(shù)據(jù)結(jié)構(gòu),他能夠使你快速的隨機(jī)訪問(wèn)存儲(chǔ)在索引中的關(guān)鍵詞,進(jìn)而找到該關(guān)鍵詞所關(guān)聯(lián)的文檔。Lucene 采用的是一種稱為反向索引(inverted index)的機(jī)制。反向索引就是說(shuō)我們維護(hù)了一個(gè)詞/短語(yǔ)表,對(duì)于這個(gè)表中的每個(gè)詞/短語(yǔ),都有一個(gè)鏈表描述了有哪些文檔包含了這個(gè)詞/短語(yǔ)。這樣在用戶輸入查詢條件的時(shí)候,就能非常快的得到搜索結(jié)果。我們將在本系列文章的第二部分詳細(xì)介紹 Lucene 的索引機(jī)制,由于 Lucene 提供了簡(jiǎn)單易用的 API,所以即使讀者剛開(kāi)始對(duì)全文本進(jìn)行索引的機(jī)制并不太了解,也可以非常容易的使用 Lucene 對(duì)你的文檔實(shí)現(xiàn)索引。

對(duì)文檔建立好索引后,就可以在這些索引上面進(jìn)行搜索了。搜索引擎首先會(huì)對(duì)搜索的關(guān)鍵詞進(jìn)行解析,然后再在建立好的索引上面進(jìn)行查找,最終返回和用戶輸入的關(guān)鍵詞相關(guān)聯(lián)的文檔。





回頁(yè)首


Lucene 軟件包分析

Lucene 軟件包的發(fā)布形式是一個(gè) JAR 文件,下面我們分析一下這個(gè) JAR 文件里面的主要的 JAVA 包,使讀者對(duì)之有個(gè)初步的了解。

Package: org.apache.lucene.document

這個(gè)包提供了一些為封裝要索引的文檔所需要的類,比如 Document, Field。這樣,每一個(gè)文檔最終被封裝成了一個(gè) Document 對(duì)象。

Package: org.apache.lucene.analysis

這個(gè)包主要功能是對(duì)文檔進(jìn)行分詞,因?yàn)槲臋n在建立索引之前必須要進(jìn)行分詞,所以這個(gè)包的作用可以看成是為建立索引做準(zhǔn)備工作。

Package: org.apache.lucene.index

這個(gè)包提供了一些類來(lái)協(xié)助創(chuàng)建索引以及對(duì)創(chuàng)建好的索引進(jìn)行更新。這里面有兩個(gè)基礎(chǔ)的類:IndexWriter 和 IndexReader,其中 IndexWriter 是用來(lái)創(chuàng)建索引并添加文檔到索引中的,IndexReader 是用來(lái)刪除索引中的文檔的。

Package: org.apache.lucene.search

這個(gè)包提供了對(duì)在建立好的索引上進(jìn)行搜索所需要的類。比如 IndexSearcher 和 Hits, IndexSearcher 定義了在指定的索引上進(jìn)行搜索的方法,Hits 用來(lái)保存搜索得到的結(jié)果。





回頁(yè)首


一個(gè)簡(jiǎn)單的搜索應(yīng)用程序

假設(shè)我們的電腦的目錄中含有很多文本文檔,我們需要查找哪些文檔含有某個(gè)關(guān)鍵詞。為了實(shí)現(xiàn)這種功能,我們首先利用 Lucene 對(duì)這個(gè)目錄中的文檔建立索引,然后在建立好的索引中搜索我們所要查找的文檔。通過(guò)這個(gè)例子讀者會(huì)對(duì)如何利用 Lucene 構(gòu)建自己的搜索應(yīng)用程序有個(gè)比較清楚的認(rèn)識(shí)。





回頁(yè)首


建立索引

為了對(duì)文檔進(jìn)行索引,Lucene 提供了五個(gè)基礎(chǔ)的類,他們分別是 Document, Field, IndexWriter, Analyzer, Directory。下面我們分別介紹一下這五個(gè)類的用途:

Document

Document 是用來(lái)描述文檔的,這里的文檔可以指一個(gè) HTML 頁(yè)面,一封電子郵件,或者是一個(gè)文本文件。一個(gè) Document 對(duì)象由多個(gè) Field 對(duì)象組成的。可以把一個(gè) Document 對(duì)象想象成數(shù)據(jù)庫(kù)中的一個(gè)記錄,而每個(gè) Field 對(duì)象就是記錄的一個(gè)字段。

Field

Field 對(duì)象是用來(lái)描述一個(gè)文檔的某個(gè)屬性的,比如一封電子郵件的標(biāo)題和內(nèi)容可以用兩個(gè) Field 對(duì)象分別描述。

Analyzer

在一個(gè)文檔被索引之前,首先需要對(duì)文檔內(nèi)容進(jìn)行分詞處理,這部分工作就是由 Analyzer 來(lái)做的。Analyzer 類是一個(gè)抽象類,它有多個(gè)實(shí)現(xiàn)。針對(duì)不同的語(yǔ)言和應(yīng)用需要選擇適合的 Analyzer。Analyzer 把分詞后的內(nèi)容交給 IndexWriter 來(lái)建立索引。

IndexWriter

IndexWriter 是 Lucene 用來(lái)創(chuàng)建索引的一個(gè)核心的類,他的作用是把一個(gè)個(gè)的 Document 對(duì)象加到索引中來(lái)。

Directory

這個(gè)類代表了 Lucene 的索引的存儲(chǔ)的位置,這是一個(gè)抽象類,它目前有兩個(gè)實(shí)現(xiàn),第一個(gè)是 FSDirectory,它表示一個(gè)存儲(chǔ)在文件系統(tǒng)中的索引的位置。第二個(gè)是 RAMDirectory,它表示一個(gè)存儲(chǔ)在內(nèi)存當(dāng)中的索引的位置。

熟悉了建立索引所需要的這些類后,我們就開(kāi)始對(duì)某個(gè)目錄下面的文本文件建立索引了,清單1給出了對(duì)某個(gè)目錄下的文本文件建立索引的源代碼。


清單 1. 對(duì)文本文件建立索引
package TestLucene;
            import java.io.File;
            import java.io.FileReader;
            import java.io.Reader;
            import java.util.Date;
            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.index.IndexWriter;
            /**
            * This class demonstrate the process of creating index with Lucene
            * for text files
            */
            public class TxtFileIndexer {
            public static void main(String[] args) throws Exception{
            //indexDir is the directory that hosts Lucene's index files
            File   indexDir = new File("D:\\luceneIndex");
            //dataDir is the directory that hosts the text files that to be indexed
            File   dataDir  = new File("D:\\luceneData");
            Analyzer luceneAnalyzer = new StandardAnalyzer();
            File[] dataFiles  = dataDir.listFiles();
            IndexWriter indexWriter = new IndexWriter(indexDir,luceneAnalyzer,true);
            long startTime = new Date().getTime();
            for(int i = 0; i < dataFiles.length; i++){
            if(dataFiles[i].isFile() && dataFiles[i].getName().endsWith(".txt")){
            System.out.println("Indexing file " + dataFiles[i].getCanonicalPath());
            Document document = new Document();
            Reader txtReader = new FileReader(dataFiles[i]);
            document.add(Field.Text("path",dataFiles[i].getCanonicalPath()));
            document.add(Field.Text("contents",txtReader));
            indexWriter.addDocument(document);
            }
            }
            indexWriter.optimize();
            indexWriter.close();
            long endTime = new Date().getTime();
            System.out.println("It takes " + (endTime - startTime)
            + " milliseconds to create index for the files in directory "
            + dataDir.getPath());
            }
            }
            

在清單1中,我們注意到類 IndexWriter 的構(gòu)造函數(shù)需要三個(gè)參數(shù),第一個(gè)參數(shù)指定了所創(chuàng)建的索引要存放的位置,他可以是一個(gè) File 對(duì)象,也可以是一個(gè) FSDirectory 對(duì)象或者 RAMDirectory 對(duì)象。第二個(gè)參數(shù)指定了 Analyzer 類的一個(gè)實(shí)現(xiàn),也就是指定這個(gè)索引是用哪個(gè)分詞器對(duì)文擋內(nèi)容進(jìn)行分詞。第三個(gè)參數(shù)是一個(gè)布爾型的變量,如果為 true 的話就代表創(chuàng)建一個(gè)新的索引,為 false 的話就代表在原來(lái)索引的基礎(chǔ)上進(jìn)行操作。接著程序遍歷了目錄下面的所有文本文檔,并為每一個(gè)文本文檔創(chuàng)建了一個(gè) Document 對(duì)象。然后把文本文檔的兩個(gè)屬性:路徑和內(nèi)容加入到了兩個(gè) Field 對(duì)象中,接著在把這兩個(gè) Field 對(duì)象加入到 Document 對(duì)象中,最后把這個(gè)文檔用 IndexWriter 類的 add 方法加入到索引中去。這樣我們便完成了索引的創(chuàng)建。接下來(lái)我們進(jìn)入在建立好的索引上進(jìn)行搜索的部分。





回頁(yè)首


搜索文檔

利用Lucene進(jìn)行搜索就像建立索引一樣也是非常方便的。在上面一部分中,我們已經(jīng)為一個(gè)目錄下的文本文檔建立好了索引,現(xiàn)在我們就要在這個(gè)索引上進(jìn)行搜索以找到包含某個(gè)關(guān)鍵詞或短語(yǔ)的文檔。Lucene提供了幾個(gè)基礎(chǔ)的類來(lái)完成這個(gè)過(guò)程,它們分別是呢IndexSearcher, Term, Query, TermQuery, Hits. 下面我們分別介紹這幾個(gè)類的功能。

Query

這是一個(gè)抽象類,他有多個(gè)實(shí)現(xiàn),比如TermQuery, BooleanQuery, PrefixQuery. 這個(gè)類的目的是把用戶輸入的查詢字符串封裝成Lucene能夠識(shí)別的Query。

Term

Term是搜索的基本單位,一個(gè)Term對(duì)象有兩個(gè)String類型的域組成。生成一個(gè)Term對(duì)象可以有如下一條語(yǔ)句來(lái)完成:Term term = new Term(“fieldName”,”queryWord”); 其中第一個(gè)參數(shù)代表了要在文檔的哪一個(gè)Field上進(jìn)行查找,第二個(gè)參數(shù)代表了要查詢的關(guān)鍵詞。

TermQuery

TermQuery是抽象類Query的一個(gè)子類,它同時(shí)也是Lucene支持的最為基本的一個(gè)查詢類。生成一個(gè)TermQuery對(duì)象由如下語(yǔ)句完成: TermQuery termQuery = new TermQuery(new Term(“fieldName”,”queryWord”)); 它的構(gòu)造函數(shù)只接受一個(gè)參數(shù),那就是一個(gè)Term對(duì)象。

IndexSearcher

IndexSearcher是用來(lái)在建立好的索引上進(jìn)行搜索的。它只能以只讀的方式打開(kāi)一個(gè)索引,所以可以有多個(gè)IndexSearcher的實(shí)例在一個(gè)索引上進(jìn)行操作。

Hits

Hits是用來(lái)保存搜索的結(jié)果的。

介紹完這些搜索所必須的類之后,我們就開(kāi)始在之前所建立的索引上進(jìn)行搜索了,清單2給出了完成搜索功能所需要的代碼。


清單2 :在建立好的索引上進(jìn)行搜索
package TestLucene;
            import java.io.File;
            import org.apache.lucene.document.Document;
            import org.apache.lucene.index.Term;
            import org.apache.lucene.search.Hits;
            import org.apache.lucene.search.IndexSearcher;
            import org.apache.lucene.search.TermQuery;
            import org.apache.lucene.store.FSDirectory;
            /**
            * This class is used to demonstrate the
            * process of searching on an existing
            * Lucene index
            *
            */
            public class TxtFileSearcher {
            public static void main(String[] args) throws Exception{
            String queryStr = "lucene";
            //This is the directory that hosts the Lucene index
            File indexDir = new File("D:\\luceneIndex");
            FSDirectory directory = FSDirectory.getDirectory(indexDir,false);
            IndexSearcher searcher = new IndexSearcher(directory);
            if(!indexDir.exists()){
            System.out.println("The Lucene index is not exist");
            return;
            }
            Term term = new Term("contents",queryStr.toLowerCase());
            TermQuery luceneQuery = new TermQuery(term);
            Hits hits = searcher.search(luceneQuery);
            for(int i = 0; i < hits.length(); i++){
            Document document = hits.doc(i);
            System.out.println("File: " + document.get("path"));
            }
            }
            }
            

在清單2中,類IndexSearcher的構(gòu)造函數(shù)接受一個(gè)類型為Directory的對(duì)象,Directory是一個(gè)抽象類,它目前有兩個(gè)子類:FSDirctory和RAMDirectory. 我們的程序中傳入了一個(gè)FSDirctory對(duì)象作為其參數(shù),代表了一個(gè)存儲(chǔ)在磁盤上的索引的位置。構(gòu)造函數(shù)執(zhí)行完成后,代表了這個(gè)IndexSearcher以只讀的方式打開(kāi)了一個(gè)索引。然后我們程序構(gòu)造了一個(gè)Term對(duì)象,通過(guò)這個(gè)Term對(duì)象,我們指定了要在文檔的內(nèi)容中搜索包含關(guān)鍵詞”lucene”的文檔。接著利用這個(gè)Term對(duì)象構(gòu)造出TermQuery對(duì)象并把這個(gè)TermQuery對(duì)象傳入到IndexSearcher的search方法中進(jìn)行查詢,返回的結(jié)果保存在Hits對(duì)象中。最后我們用了一個(gè)循環(huán)語(yǔ)句把搜索到的文檔的路徑都打印了出來(lái)。 好了,我們的搜索應(yīng)用程序已經(jīng)開(kāi)發(fā)完畢,怎么樣,利用Lucene開(kāi)發(fā)搜索應(yīng)用程序是不是很簡(jiǎn)單。





回頁(yè)首


總結(jié)

本文首先介紹了 Lucene 的一些基本概念,然后開(kāi)發(fā)了一個(gè)應(yīng)用程序演示了利用 Lucene 建立索引并在該索引上進(jìn)行搜索的過(guò)程。希望本文能夠?yàn)閷W(xué)習(xí) Lucene 的讀者提供幫助。



關(guān)于作者

周登朋,軟件工程師,上海交通大學(xué)研究生,對(duì) Java 技術(shù)以及信息檢索技術(shù)很感興趣。您可以通過(guò) zhoudengpeng@yahoo.com.cn 與他聯(lián)系。

posted on 2010-01-05 09:41 baby-fly 閱讀(345) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Information Retrival / Data Mining
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲网站在线看| 亚洲一区精品视频| 久久中文字幕一区二区三区| 久久亚洲精品欧美| 亚洲影院免费| 久久久久.com| 在线天堂一区av电影| 久久精品国产第一区二区三区最新章节| 亚洲精品视频在线播放| 性色av一区二区三区| 亚洲精品乱码久久久久久按摩观| 亚洲色无码播放| 亚洲人成网站999久久久综合| 亚洲免费在线观看| 一区二区三区精品在线| 久久综合九色99| 欧美中文字幕在线播放| 欧美人牲a欧美精品| 欧美成人精品福利| 国产麻豆午夜三级精品| 亚洲精品视频免费在线观看| 亚洲小说欧美另类社区| 亚洲二区视频| 欧美一区二区在线免费播放| 亚洲性图久久| 欧美另类综合| 亚洲国产欧美一区二区三区丁香婷| 国产精品亚洲综合一区在线观看| 亚洲精品社区| 99亚洲一区二区| 欧美第一黄网免费网站| 欧美 日韩 国产精品免费观看| 国产亚洲美州欧州综合国| 在线亚洲免费视频| 亚洲天堂av综合网| 欧美日韩三级视频| 99re6这里只有精品| 日韩特黄影片| 欧美成人第一页| 欧美高清在线播放| 亚洲国产精品国自产拍av秋霞| 久久久99精品免费观看不卡| 久久婷婷国产综合尤物精品| 国产一级精品aaaaa看| 欧美亚洲视频一区二区| 欧美一区二区视频97| 国产精品视频免费| 亚洲一区二区三区四区视频| 欧美一区二区免费观在线| 国产精品扒开腿做爽爽爽视频| 99精品热视频| 亚洲欧美日韩另类精品一区二区三区 | 免费短视频成人日韩| 鲁鲁狠狠狠7777一区二区| 激情懂色av一区av二区av| 久久狠狠久久综合桃花| 免费日韩av电影| 亚洲国产精品久久人人爱蜜臀| 欧美国产一区在线| 日韩西西人体444www| 亚洲综合日韩| 国产午夜精品久久久| 久久久99爱| 91久久精品国产91久久性色| 中文一区二区| 国产亚洲精品久久久久久| 久久亚洲精品欧美| 亚洲毛片在线观看| 欧美一区二区福利在线| 国色天香一区二区| 欧美国产一区二区在线观看 | 亚洲人成人一区二区三区| 欧美伦理影院| 亚洲特色特黄| 美女视频黄免费的久久| 亚洲精品一区二区在线| 欧美视频一区二区三区| 欧美一区二区三区四区夜夜大片 | 亚洲欧美日韩综合aⅴ视频| 久久久久国产精品厨房| 在线日本成人| 欧美视频日韩视频| 久久久久久亚洲精品杨幂换脸 | 亚洲精品黄网在线观看| 国产精品美女在线观看| 免费成人在线观看视频| 亚洲一区二区黄| 欧美国产在线电影| 欧美中文字幕视频在线观看| 亚洲九九精品| 国产一区日韩欧美| 欧美日韩在线免费观看| 久久久国产91| 亚洲自拍偷拍一区| 亚洲黄色成人| 久久婷婷国产麻豆91天堂| 亚洲午夜激情在线| 亚洲福利在线看| 国产精品综合| 欧美激情一区二区三区四区 | 久久久久一区二区三区四区| 一本久道久久综合婷婷鲸鱼| 一区二区亚洲精品国产| 国产精品婷婷| 欧美精品videossex性护士| 久久成人免费| 亚洲欧美www| 在线一区二区三区四区| 亚洲国产精品第一区二区三区| 久久国产一区二区三区| 亚洲一区二区免费看| 91久久久亚洲精品| 一区二区亚洲精品| 国产在线不卡| 国产欧美综合一区二区三区| 国产精品成人免费| 欧美日韩国产精品一卡| 欧美aⅴ99久久黑人专区| 久久久久久久久久久久久久一区 | 亚洲美女啪啪| 亚洲第一级黄色片| 亚洲一区亚洲二区| 999亚洲国产精| 亚洲巨乳在线| 亚洲电影在线免费观看| 欧美成人三级在线| 免费不卡在线观看av| 美女国产精品| 美女视频黄 久久| 你懂的国产精品| 欧美成人一区二区在线| 老巨人导航500精品| 老司机久久99久久精品播放免费| 久久精品日产第一区二区| 欧美在线观看视频在线| 久久精品国产第一区二区三区最新章节 | 中国亚洲黄色| 亚洲少妇一区| 亚洲免费影视第一页| 先锋影音国产精品| 欧美一区2区三区4区公司二百| 性xx色xx综合久久久xx| 久久激情五月丁香伊人| 久久久久久久久伊人| 久久久美女艺术照精彩视频福利播放| 久久精品二区| 欧美va天堂va视频va在线| 欧美日韩国产小视频在线观看| 91久久国产自产拍夜夜嗨| 亚洲福利视频网站| 亚洲精品系列| 亚洲一区二区在线观看视频| 欧美在线观看你懂的| 裸体一区二区| 欧美了一区在线观看| 欧美视频国产精品| 国产亚洲精品久久久久婷婷瑜伽| 激情综合久久| 夜久久久久久| 久久人人精品| 亚洲精品乱码久久久久久久久 | 99国产精品99久久久久久| 亚洲在线中文字幕| 久久激情综合| 欧美成人精品激情在线观看| 日韩视频第一页| 亚洲欧美日韩精品在线| 老司机精品导航| 欧美色道久久88综合亚洲精品| 国产欧美视频一区二区| 亚洲黄色小视频| 亚洲在线中文字幕| 久久夜色撩人精品| 亚洲人成在线免费观看| 午夜国产精品影院在线观看| 女女同性精品视频| 国产精自产拍久久久久久| 亚洲激情一区二区三区| 欧美一区二区三区四区夜夜大片| 看片网站欧美日韩| 一区二区三区高清| 久久久另类综合| 国产精品美女一区二区| 亚洲人成网站在线观看播放| 欧美一区二区视频在线观看2020 | 黄色成人在线网址| 亚洲调教视频在线观看| 久久夜精品va视频免费观看| 99re这里只有精品6| 久久精品中文字幕一区| 欧美日韩系列| 亚洲国产成人精品久久| 国产精品青草综合久久久久99| 在线不卡亚洲| 午夜在线观看免费一区| 亚洲精品久久久久中文字幕欢迎你| 久久精品动漫| 国产亚洲精品久久久久久| 亚洲男人的天堂在线aⅴ视频| 亚洲激情校园春色|