• <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>

            Javen-Studio 咖啡小屋

            http://javenstudio.org - C++ Java 分布式 搜索引擎
            Naven's Research Laboratory - Thinking of Life, Imagination of Future

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              24 隨筆 :: 57 文章 :: 170 評(píng)論 :: 4 Trackbacks

            第一部分 接觸 Lucene

            Lucene的核心

            本書(shū)的第一部分(first half of)覆蓋了Lucene的對(duì)外接口(covers out-of-the-box Lucene)。你將接觸到Lucene(Meet Lucene)的一個(gè)全面的概況(general overview),并且還開(kāi)發(fā)一個(gè)完整的索引建立和檢索的程序。每一個(gè)連續(xù)的章節(jié)(Each successive chapter)系統(tǒng)地(systematically )深入研究(delves into)特定的領(lǐng)域(specific areas)。索引“Indexing”數(shù)據(jù)和文檔以及隨后搜索“Searching”它們是使用Lucene的第一步。回到一個(gè)覆蓋索引的進(jìn)程(Returning to a glossed-over indexing process),分析器“Analysis”將替代( fill in)你對(duì)影響Lucene索引后的文本的事物的理解。搜索“Searching”是Lucene真正擅長(zhǎng)(really shines)的地方。本部分結(jié)束的(concludes with)章節(jié)是介紹僅使用內(nèi)置的特性探討高級(jí)搜索“Advanced searching”技術(shù),而擴(kuò)展搜索“Extending search”展示(showcasing)Lucene對(duì)自定義的目標(biāo)“custom purposes”的擴(kuò)展性(extensibility)。
             


            接觸 Lucene


            This chapter covers 本章節(jié)包括

            ■     Understanding Lucene 理解 Lucene
            ■     Using the basic indexing API 使用基本的索引API
            ■     Working with the search API 在工作中使用搜索API
            ■     Considering alternative products 考慮其他可選的產(chǎn)品


            Lucene的流行和成功背后的關(guān)鍵因素(key factors)的其中一個(gè)就是它的簡(jiǎn)單(simplicity)。它的索引和搜索API的細(xì)致暴露(careful exposure)出一個(gè)良好設(shè)計(jì)軟件的標(biāo)志(a sign of the well- designed software)。因此(Consequently),你為了開(kāi)始使用它不需要深入了解(in-depth knowledge about)Lucene的信息索引和獲取(retrieval)是怎樣工作的。而且(Moreover),Lucene的簡(jiǎn)單易懂(straightforward)的API只需你學(xué)習(xí)使用它的一小部分(a handful of)類(lèi)。
            在本章中,我們通過(guò)可以使用的(ready-to-use)代碼示例向你怎樣使用Lucene來(lái)執(zhí)行基本的索引和搜索,然后我們簡(jiǎn)單地介紹(briefly introduce)所有這些這兩節(jié)步驟中(for both of these processes)你需要了解的核心元素。我們同樣也提供關(guān)于Java/non-Java,free和商業(yè)產(chǎn)品競(jìng)爭(zhēng)的簡(jiǎn)單回顧(brief reviews)。

            1.1  信息組織和訪問(wèn)的演化information organization and access

            (略)

            1.2  理解 Lucene

            不同的人使用不同的方法(different approaches)來(lái)解決相同的問(wèn)題,即信息超負(fù)荷問(wèn)題(information overload)。一些人使用新奇的(novel)用戶(hù)接口來(lái)工作,一些使用智能的代理(intelligent agents),另一些開(kāi)發(fā)成熟的(sophisticated)搜索工具如Lucene。在本節(jié)稍后我們展示(jump into action)代碼示例之前,我們提供你一張高層次(high-level)的圖,說(shuō)明哪些是Lucene的東西,哪些不是,以及Lucene未來(lái)的樣子。

            1.2.1 Lucene 是什么

            Lucene 是一個(gè)高性能(high performance)的可伸縮的(scalable)信息檢索庫(kù)(Information Retrieval (IR) library),它可以讓你給你的應(yīng)用程序添加索引和搜索能力。Lucene是一個(gè)成熟的(mature)免費(fèi)的open-source 項(xiàng)目,使用Java實(shí)現(xiàn),它是廣泛流行的Apache Jakarta項(xiàng)目大家庭中的其中一個(gè)成員,并且許可License是基于自由主義(liberal)的Apache Software License基礎(chǔ)之上的。同樣的(As such),Lucene現(xiàn)在在很短的幾年內(nèi)已經(jīng)成為一個(gè)最流行的免費(fèi)的Java IR library。

            NOTE         貫穿本書(shū)中,我們將使用term Information Retrieval (IR)來(lái)描述像Lucene這樣的搜索工具。人們常常將IR libraries引用為搜索引擎,但是你卻不應(yīng)該搞混IR libraries和web search engines。

            正如你馬上就會(huì)發(fā)現(xiàn)的一樣,Lucene提供一個(gè)簡(jiǎn)單的而且依然強(qiáng)大的核心API,而且僅需要最小限度地學(xué)習(xí)全文索引和檢索(full-text indexing and searching),你僅需要學(xué)習(xí)一把(a handful of)類(lèi)就能開(kāi)始把Lucene集成進(jìn)一個(gè)應(yīng)用程序。因?yàn)長(zhǎng)ucene是一個(gè)Java庫(kù),它不承擔(dān)(make assumptions about)它索引和檢索的是什么,這使得它比其它一些搜索應(yīng)用程序更有優(yōu)勢(shì)(an advantage over)。對(duì)Lucene陌生(new to)的人經(jīng)常錯(cuò)把它當(dāng)作一個(gè)可以馬上使用(ready-to-use)的應(yīng)用程序,就像一個(gè)文件檢索(file-search)程序,或者一個(gè)web網(wǎng)絡(luò)爬蟲(chóng)(crawler),或者一個(gè)web站點(diǎn)搜索引擎。這些都不是Lucene的實(shí)質(zhì):Lucene實(shí)際是一個(gè)軟件庫(kù)(software library),一個(gè)開(kāi)發(fā)工具包(toolkit)如果你愿意這樣稱(chēng)呼(if you will),而不是一個(gè)具備完整特性的(full-featured)搜索應(yīng)用程序。這使它關(guān)注自己的文本索引和搜索技術(shù)(It concerns itself with text indexing and searching),并且這些事它完成得非常好。Lucene使得你的應(yīng)用程序處理業(yè)務(wù)規(guī)則(business rules),特別地針對(duì)它的問(wèn)題領(lǐng)域(problem domain),而把復(fù)雜的索引和搜索實(shí)現(xiàn)掩蓋起來(lái),只提供簡(jiǎn)單易用(simple-to-use)的API。你可以把Lucene當(dāng)作一層(layer),應(yīng)用程序位于它之上(sit on top of),就像圖1.5所描述(depicted)的那樣。一些擁有完整特性的搜索程序被建立在Lucene上層。如果你尋找一些與之相關(guān)的預(yù)創(chuàng)建的東西(something prebuilt)或者一個(gè)為了抓取(crawling),處理(document handling)和搜索文檔,請(qǐng)參考(consult) Lucene Wiki “powered by” 網(wǎng)頁(yè)(http://wiki.apache.org/jakarta-lucene/PoweredBy)更多選項(xiàng)如下: Zilverline, SearchBlox, Nutch, LARM, and jSearch, 還有其它一小部分的命名(to name a few)。個(gè)案研究(Case studies of)包括Nutch 和SearchBlox 將在第10章介紹。

            1.2.2   Lucene 能為你做什么

            Lucene 允許給你的程序添加索引和搜索的能力。(這些功能將在1.3節(jié)里描述),Lucene能夠索引并且可以使得任何能夠被轉(zhuǎn)換成文本格式的(textual format)數(shù)據(jù)能夠被搜索(search- able),請(qǐng)參考圖1.5。

             

             

            Figure 1.5    A typical application integration with Lucene一個(gè)集成了Lucene的典型程序


            Lucene并不關(guān)心數(shù)據(jù)源,及其格式,甚至其語(yǔ)言,只要你能夠把它轉(zhuǎn)換成文本就行。這意味著你能夠使用Lucene來(lái)索引和搜索存儲(chǔ)在文件中的數(shù)據(jù),以及在遠(yuǎn)端web服務(wù)器的web網(wǎng)頁(yè),還有存儲(chǔ)在本地文件系統(tǒng)中文檔,簡(jiǎn)單的文本文件, Microsoft Word 文檔,或者PDF文檔,或者任何其它你能分離出(extract)文本信息的格式都行。簡(jiǎn)單地,通過(guò)Lucene的幫助你能夠索引存儲(chǔ)在你的數(shù)據(jù)庫(kù)中的數(shù)據(jù),可以給你的用戶(hù)提供全文檢索能力(full-text search capabilities),而這很多數(shù)據(jù)庫(kù)都不提供。一旦你集成了Lucene,使用你的程序的用戶(hù)就能夠讓搜索這樣一些查詢(xún)?cè)~:+George +Rice -eat –pudding,  Apple –pie +Tiger, animal:monkey 或者food:banana,等等。.使用Lucene,你能夠索引和搜索email郵件,郵件列表檔案,即時(shí)通信聊天信息,你的Wiki網(wǎng)頁(yè),等等繼續(xù)。

            1.2.3 Lucene 的歷史

            Lucene 最先是由Doug Cutting開(kāi)發(fā)的,它最初提供下載是在它在SourceForge網(wǎng)站的主頁(yè)上。它后來(lái)加入Apache軟件基金的高質(zhì)量的開(kāi)源Java產(chǎn)品的Jakarta家族是在2001年九月份。從那之后的每一次發(fā)布,項(xiàng)目得到可喜明顯易見(jiàn)的增強(qiáng),吸引更多的用戶(hù)和開(kāi)發(fā)者加入。在2004年七月份,發(fā)布了 Lucene version 1.4,后來(lái)修正了一個(gè)bug在10月份早期發(fā)布了1.4.2 版本。

            Doug Cutting 在Lucene幕后依然保持主要的影響力,但是自從Lucene移動(dòng)到Apache Jakarta的庇護(hù)(umbrella)之下后,更多聰明的智慧力量加入到這個(gè)項(xiàng)目中來(lái)。在本書(shū)寫(xiě)作的時(shí)候,Lucene的核心團(tuán)隊(duì)包括了半打的活躍開(kāi)發(fā)者(a dozen active developers),其中兩個(gè)還是本書(shū)的作者。除了這些官方的開(kāi)發(fā)者之外,Lucene還有一個(gè)非常龐大(a fairly large)而且活躍的技術(shù)用戶(hù)社區(qū),非常頻繁地貢獻(xiàn)(frequently contributes)補(bǔ)丁,BUG修復(fù),以及新的特性等。

            1.2.4 誰(shuí)在使用 Lucene

            誰(shuí)在使用呢?除了Lucene的Wiki網(wǎng)站提及(mentioned)的團(tuán)體(organizations)之外,許多(a number of)其他的大型的著名的(well-known)跨國(guó)(multinational)組織也在使用Lucene。它為Eclipse IDE提供搜索能力,大不列顛百科全書(shū)(Encyclopedia Britannica)CD-ROM/DVD,F(xiàn)edEx 還有Mayo Clinic,惠普Hewlett-Packard,New Scientist magazine, Epiphany,MIT’s OpenCourseware 以及DSpace, Akamai’s EdgeComputing platform等等,當(dāng)然,你的名字也將很快加入此列表中。

            1.2.5 Lucene 其它語(yǔ)言版本:Perl, Python, C++, .NET, Ruby

            有一條判斷一個(gè)開(kāi)源軟件是否成功的途徑是通過(guò)考察它被改成其它編程語(yǔ)言的數(shù)量。使用這個(gè)標(biāo)準(zhǔn),Lucene是非常成功的,盡管原始的Lucene是用Java寫(xiě)的,在本書(shū)寫(xiě)作的時(shí)候,Lucene已經(jīng)被有很多其它語(yǔ)言版本了: Perl,Python,C++ 和 .NET,以及一些基礎(chǔ)(groundwork)的工作在轉(zhuǎn)換到Ruby語(yǔ)言的工作中完成了。這是及其令人興奮的新聞,對(duì)那些需要訪問(wèn)用不同語(yǔ)言寫(xiě)成的應(yīng)用程序的Lucene索引時(shí)的開(kāi)發(fā)者來(lái)說(shuō)確實(shí)如此。你在第9章中能夠?qū)W到更多有關(guān)這方面的東西。

            1.3  索引和搜索Indexing and searching

            所有搜索引擎的心就是索引的概念(concept):處理那些原始的數(shù)據(jù)轉(zhuǎn)換成一個(gè)非常有效率(highly efficient)的交叉引用的(cross-reference)查找(lookup)為了便于(facilitate)加快(rapid)搜索。讓我們做一個(gè)快速的從很高層面來(lái)觀察(quick high-level look at)索引和搜索的處理。

            1.3.1 索引是什么,為什么它很重要?

            假設(shè)(Suppose)你需要搜索一個(gè)巨大數(shù)量的文件,而且你想能夠找出那些包含了某一些詞或者短語(yǔ)(a certain word or a phrase)的文件,你會(huì)怎樣寫(xiě)一個(gè)程序完成這樣的事呢?一個(gè)幼稚的方法(naive approach)也許是持續(xù)地在每一個(gè)文件中掃描(sequentially scan)給定的詞匯或者短語(yǔ)。這個(gè)方法有很多缺點(diǎn)(a number of flaws),太巨大了。這就是索引進(jìn)來(lái)的地方:為了快速地搜索很龐大數(shù)量的文本,你必須先索引這些文本,并轉(zhuǎn)換成一個(gè)會(huì)讓你搜索更快速的格式,消除(eliminating)那些緩慢的按順序的掃描過(guò)程(the slow sequential scanning process)。這個(gè)轉(zhuǎn)換過(guò)程就叫索引(indexing),它的輸出被叫做一條索引(an index)。

             你可以把一條索引當(dāng)作一個(gè)數(shù)據(jù)結(jié)構(gòu)(data structure),它允許快速的隨機(jī)訪問(wèn)(fast random access)那些存儲(chǔ)在里面的詞匯。在它之后的的概念(concept behind it)與一本書(shū)后的索引類(lèi)似(is analogous to),這可以讓你很快速地定位(locate)討論某些確定主題的(discuss certain topics)的頁(yè)。而在Lucene之中(In the case of Lucene),一條索引是一個(gè)特別設(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu)(a specially designed data structure),典型的情況是(typically)存儲(chǔ)在文件系統(tǒng)之中作為一系列文件(a set of index files)。我們?cè)诟戒汢(appendix B)中詳細(xì)地(in detail in)覆蓋了(cover)索引文件的結(jié)構(gòu),但是目前暫時(shí)把一條Lucene索引當(dāng)作一個(gè)允許快速檢索詞匯的工具。


            1.3.2 什么是搜索呢 What is searching?

            搜索(Searching)就是查找一條索引里的單詞來(lái)找出它們出現(xiàn)的文檔的這樣一個(gè)過(guò)程。一個(gè)搜索的質(zhì)量是用精度(precision)和回調(diào)法(recall metrics)來(lái)典型地描述(typically described)的。回調(diào)(Recall)測(cè)量(measures)搜索系統(tǒng)查找相關(guān)的(relevant)文檔是否好,然而(whereas)精度(precision)測(cè)量系統(tǒng)過(guò)濾出(filters out)不相關(guān)(irrelevant)文檔是否好,然而你在思考搜索的時(shí)候必須考慮許多(a number of)其他因素(factors)。我們已經(jīng)提及(mentioned)速度和快速搜索大量(large quantities of)文本的能力。支持(Support for)單個(gè)的(Single)和多個(gè)詞匯的查詢(xún)(multiterm queries),短語(yǔ)查詢(xún)(phrase queries),通配符(wildcards),結(jié)果分級(jí)(result ranking),以及排序(sorting)功能,也同樣重要,照現(xiàn)在的樣子(as is)輸入這些查詢(xún)的(entering those queries)一個(gè)友好的語(yǔ)法(friendly syntax)。Lucene的強(qiáng)大的軟件庫(kù)提供許多查詢(xún)特性,(bells)和(whistles)—很多我們都不得不展開(kāi)(spread)我們的查詢(xún)覆蓋(coverage over)三章(第3章和5章和6章)。

            1.4  Lucene in action: 一個(gè)簡(jiǎn)單的程序

            讓我們看看Lucene in action,為了寫(xiě)這個(gè)程序,回想(recall)索引和搜索文件的問(wèn)題,這個(gè)問(wèn)題在 1.3.1 節(jié)描述過(guò),此外(furthermore)假設(shè)(suppose)你需要索引和搜索存儲(chǔ)在一個(gè)目錄樹(shù)(directory tree)中的文件,而不是僅僅查找單一的一個(gè)目錄。為樂(lè)向你展示Lucene的索引和搜索能力,我們將使用一對(duì)命令行(command-line)的應(yīng)用程序:Indexer和Searcher。首先我們將給一個(gè)包含文本文件的目錄樹(shù)建立索引,然后我們搜索這個(gè)創(chuàng)建的索引。

            這些示例程序?qū)⒆屇闶煜ぃ╢amiliarize)Lucene的API,它的輕松的使用(its ease of use)以及它的強(qiáng)大。這些代碼清單(code listings)是完整的,可以使用的(ready-to-use)命令行程序。如果文件的索引/檢索是你需要去解決的問(wèn)題,你可以復(fù)制這些代碼清單,并且揉擰(tweak)它們來(lái)適合(suit)你所需要的地方。在接下來(lái)的章節(jié)中,我們將描述Lucene在許多更高級(jí)使用的細(xì)節(jié)(much greater detail)的每一個(gè)方面(each aspect)。
             
            在我們能夠使用Lucene來(lái)搜索之前,我們需要先創(chuàng)建一個(gè)索引,所以我們以一個(gè)Indexer應(yīng)用程序作為開(kāi)始。

            1.4.1   創(chuàng)建一個(gè)索引

            在本節(jié)中,你將看到一個(gè)單一的類(lèi)叫作Indexer,它的四個(gè)靜態(tài)方法(static methods)合起來(lái)(together),它們遞歸地(recursively)來(lái)回遍歷(traverse)文件系統(tǒng)的目錄,并給所有擴(kuò)展名為.txt的文件建上索引。當(dāng)Indexer執(zhí)行完成后(completes execution),它會(huì)為它的同胞:Searcher工具(將在1.4.2節(jié)中介紹(presented))產(chǎn)生(leaves behind)一個(gè)Lucene索引。

            我們不期望你熟悉(be familiar with)在這個(gè)例子中使用的這些少數(shù)的Lucene類(lèi)和方法,我們會(huì)簡(jiǎn)單地介紹它們(explain them shortly)。在這些有注釋的代碼清單(the annotated code listing)后,我們向你展示怎樣使用Indexer,如果它能在你看到它是怎么編碼的之前幫助你學(xué)習(xí)Indexer是怎樣使用的,請(qǐng)直接跳到(go directly to)在這些代碼后的使用討論(usage discussion)部分。

            Using Indexer to index text files
            Listing 1.1 shows the Indexer command-line program. It takes two arguments:

            ■     A path to a directory where we store the Lucene index

            ■     A path to a directory that contains the files we want to index

            Listing 1.1    Indexer: traverses a file system and indexes .txt files

            /**
             * This code was originally written for
             * Erik's Lucene intro java.net article
             
            */

            public class Indexer {

              
            public static void main(String[] args) throws Exception {
                
            if (args.length != 2{
                  
            throw new Exception("Usage: java " + Indexer.class.getName()
                    
            + " <index dir> <data dir>");
             
                }

                File indexDir 
            = new File(args[0]);
                File dataDir 
            = new File(args[1]);

                
            long start = new Date().getTime();
             
                
            int numIndexed = index(indexDir, dataDir);
                
            long end = new Date().getTime();

                System.out.println(
            "Indexing " + numIndexed + " files took "
                  
            + (end - start) + " milliseconds");
              }


              
            // open an index and start file directory traversal
              public static int index(File indexDir, File dataDir)
                
            throws IOException {

                
            if (!dataDir.exists() || !dataDir.isDirectory()) {
                  
            throw new IOException(dataDir
                    
            + " does not exist or is not a directory");
                }

             

                IndexWriter writer 
            = new IndexWriter(indexDir, new StandardAnalyzer(), true); writer.setUseCompoundFile(false);

                indexDirectory(writer, dataDir);

                
            int numIndexed = writer.docCount();
                writer.optimize();
                writer.close();
             
                
            return numIndexed;
              }


              
            // recursive method that calls itself when it finds a directory
              private static void indexDirectory(IndexWriter writer, File dir)
                
            throws IOException {

                File[] files 
            = dir.listFiles();

                
            for (int i = 0; i < files.length; i++{
                  File f 
            = files[i];
                  
            if (f.isDirectory()) {
             
                    indexDirectory(writer, f);
             
                  }
             else if (f.getName().endsWith(".txt")) {
                    indexFile(writer, f);
                  }

                }

              }


              
            // method to actually index a file using Lucene
              private static void indexFile(IndexWriter writer, File f)
                
            throws IOException {

                
            if (f.isHidden() || !f.exists() || !f.canRead()) {
                  
            return;
                }


                System.out.println(
            "Indexing " + f.getCanonicalPath());
             
                Document doc 
            = new Document();
                doc.add(Field.Text(
            "contents"new FileReader(f)));

                doc.add(Field.Keyword(
            "filename", f.getCanonicalPath()));

                writer.addDocument(doc);
              }

            }




            譯者 Naven 審校 Scar 未完待續(xù)

            posted on 2005-12-21 20:55 Javen-Studio 閱讀(6338) 評(píng)論(8)  編輯 收藏 引用

            評(píng)論

            # re: Lucene in Action 中文版 第一章 親密接觸 2006-01-11 15:32 Fantsy
            老大,后續(xù)章節(jié)呢,等著你了,呵呵,支持!:)  回復(fù)  更多評(píng)論
              

            # re: Lucene in Action 中文版 第一章 親密接觸 2006-01-11 21:23 Javen-Studio
            非常抱歉,最近工作太忙,顧不上了,等緩一緩先吧  回復(fù)  更多評(píng)論
              

            # re: Lucene in Action 中文版 第一章 親密接觸 2006-02-10 10:12 wuan
            這是你自己翻譯的么,翻譯的不錯(cuò),有沒(méi)有Lucene資料漢化的團(tuán)隊(duì)  回復(fù)  更多評(píng)論
              

            # re: Lucene in Action 中文版 第一章 親密接觸 2006-02-13 12:51 Javen-Studio
            是啊,是我看一點(diǎn)翻一點(diǎn)的,也有便于自己復(fù)習(xí)之需,翻譯團(tuán)隊(duì)不知道,估計(jì)官方已經(jīng)在譯了吧  回復(fù)  更多評(píng)論
              

            # re: Lucene in Action 中文版 第一章 親密接觸 2006-02-22 13:57 zw_ren
            我自己也翻譯了一些了,大家有需要的,可以到我的blog上下載下來(lái)看看。
            如果覺(jué)得我翻得還可以,請(qǐng)給我留言。
            http://zw.cublog.cn  回復(fù)  更多評(píng)論
              

            # re: Lucene in Action 中文版 第一章 親密接觸 2006-02-22 13:59 zw_ren
            我自己也翻譯了一些了,大家有需要的,可以到我的blog上下載下來(lái)看看。
            如果覺(jué)得我翻得還可以,請(qǐng)給我留言。
            http://zw.cublog.cn  回復(fù)  更多評(píng)論
              

            # re: Lucene in Action 中文版 第一章 親密接觸 2007-09-07 23:08 nagi
            不錯(cuò)  回復(fù)  更多評(píng)論
              

            # re: Lucene in Action 中文版 第一章 親密接觸 2007-12-28 09:59 san
            翻譯得很好,簡(jiǎn)單,明白~  回復(fù)  更多評(píng)論
              


            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久夜色精品国产亚洲av| 亚洲精品国产自在久久| 亚洲国产精品无码成人片久久| 久久精品免费大片国产大片| 亚洲成色999久久网站| 久久精品国产91久久综合麻豆自制 | 亚洲日本va午夜中文字幕久久| 久久99精品国产99久久6| 国产精品免费久久| 久久成人国产精品一区二区| AAA级久久久精品无码区| 久久99国产精品成人欧美| 国产精品狼人久久久久影院 | 性高朝久久久久久久久久| 欧美午夜A∨大片久久| 亚洲国产香蕉人人爽成AV片久久| 久久亚洲2019中文字幕| 亚洲精品99久久久久中文字幕| 一级女性全黄久久生活片免费| 久久人人爽人人爽人人片AV东京热| 久久国产AVJUST麻豆| 亚洲国产精品无码久久一线| 久久久噜噜噜久久中文福利| 新狼窝色AV性久久久久久| 久久天堂电影网| 久久人妻少妇嫩草AV蜜桃| 狠狠色综合网站久久久久久久高清| 人妻精品久久无码专区精东影业| 99久久精品国产高清一区二区 | 久久99热这里只有精品国产| 色99久久久久高潮综合影院| 亚洲人成伊人成综合网久久久 | 久久男人AV资源网站| 亚洲va久久久噜噜噜久久天堂| 色综合久久88色综合天天| 怡红院日本一道日本久久 | 久久久久久久综合日本亚洲| 久久狠狠一本精品综合网| 中文字幕无码免费久久| 9191精品国产免费久久 | 久久无码人妻一区二区三区 |