3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

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

编程问答

(转)Lucene

發布時間:2025/5/22 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (转)Lucene 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

lucene

Lucene.Net?系列一本文介紹了什么是Lucene,Lucene能做什么.

如何從一個文件夾下的所有txt文件中查找特定的詞?

本文將圍繞該個實例介紹了lucene.net的索引的建立以及如何針對索引進行搜索.最后還將給出源代碼供大家學習.

源代碼下載

What’s Lucene
Lucene是一個信息檢索的函數庫(Library),利用它你可以為你的應用加上索引和搜索的功能.

Lucene的使用者不需要深入了解有關全文檢索的知識,僅僅學會使用庫中的一個類,你就為你的應用實現全文檢索的功能.

不過千萬別以為Lucene是一個象google那樣的搜索引擎,Lucene甚至不是一個應用程序,它僅僅是一個工具,一個Library.你也可以把它理解為一個將索引,搜索功能封裝的很好的一套簡單易用的API.利用這套API你可以做很多有關搜索的事情,而且很方便.

What Can Lucene Do

Lucene可以對任何的數據做索引和搜索. Lucene不管數據源是什么格式,只要它能被轉化為文字的形式,就可以被Lucene所分析利用.也就是說不管是MS word, Html ,pdf還是其他什么形式的文件只要你可以從中抽取出文字形式的內容就可以被Lucene所用.你就可以用Lucene對它們進行索引以及搜索.

How To Use Lucene --- A Simple Example
示例介紹:

為作為輸入參數的文件夾下的所有txt類型的文件做索引,做好的索引文件放入index文件夾.

然后在索引的基礎上對文件進行全文搜索.

1.???????建立索引
IndexWriter writer = new IndexWriter("index", new StandardAnalyzer(), true);
IndexDocs(writer, new System.IO.FileInfo(args[0]));???????????????
writer.Optimize();
writer.Close();

IndexWriter是對索引進行寫操作的一個類,利用它可以創建一個索引對象然后往其中添加文件.需要注意它并不是唯一可以修改索引的類.在索引建好后利用其他類還可以對其進行修改.

構造函數第一個參數是建立的索引所要放的文件夾的名字.第二個參數是一個分析對象,主要用于從文本中抽取那些需要建立索引的內容,把不需要參與建索引的文本內容去掉.比如去掉一些a the之類的常用詞,還有決定是否大小寫敏感.不同的選項通過指定不同的分析對象控制.第三個參數用于確定是否覆蓋原有索引的.

第二步就是利用這個writer往索引中添加文件.具體后面再說.

第三步進行優化.

第四步關閉writer.

?

下面具體看看第二步:

???public static void IndexDirectory(IndexWriter writer, FileInfo file)
???????? {
????????????? if (Directory.Exists(file.FullName))
????????????? {
?????????????????? String[] files = Directory.GetFileSystemEntries(file.FullName);
?????????????????? // an IO error could occur
?????????????????? if (files != null)
?????????????????? {
?????????????????????? for (int i = 0; i < files.Length; i++)
?????????????????????? {
??????????????????????????? IndexDirectory(writer, new FileInfo(files[i]));? //這里是一個遞歸
?????????????????????? }
?????????????????? }
????????????? }
????????????? else if (file.Extension == ".txt")
????????????? {
?????????????????? IndexFile(file, writer);
????????????? }
???????? }

?

???????? private static void IndexFile(FileInfo file, IndexWriter writer)
???????? {
????????????? Console.Out.WriteLine("adding " + file);
????????????? try
????????????? {
?????????????????? Document doc = new Document();???????????????????
?????????????????? doc.Add(Field.Keyword("filename", file.FullName));

?????????????????? doc.Add(Field.Text("contents", new StreamReader(file.FullName)));

?????????????????? writer.AddDocument(doc);
????????????? }
??????????????
????????????? catch (FileNotFoundException fnfe)
????????????? {
???????????????????
????????????? }
???? }

主要就是兩個函數一個用于處理文件夾(不是為文件夾建立索引),一個用于真正為文件建立索引.

因此主要集中看一下IndexFile這個方法.首先建立Document對象,然后為Document對象添加一些屬性Field.你可以把Document對象看成是虛擬文件,將來將從此獲取信息.而Field則看成是描述此虛擬文件的元數據(metadata).

其中Field包括四個類型:

Keywork

該類型的數據將不被分析,而會被索引并保存保存在索引中.

UnIndexed

該類型的數據不會被分析也不會被索引,但是會保存在索引.

UnStored

和UnIndexed剛好相反,被分析被索引,但是不被保存.

Text

和UnStrored類似.如果值的類型為string還會被保存.如果值的類型Reader就不會被保存和UnStored一樣.

?

最后將每一個Document添加到索引當中.

需要注意的是索引不僅可以建立在文件系統上,也可以建立在內存中.

例如

IndexWriter writer = new IndexWriter("index", new StandardAnalyzer(), true);

在第一個參數不是指定文件夾的名字而是使用Directory對象,并使用它的子類RAMDirectory,就可以將索引建立在內存當中.

?

2.???????對索引進行搜索

IndexSearcher indexSearcher= new IndexSearcher(indexDir);
Query query = QueryParser.Parse(queryString, "contents",new StandardAnalyzer());
Hits hits = indexSearcher.Search(query);

?第一步利用IndexSearcher打開索引文件用于后面搜索,其中的參數是索引文件的路徑.

第二步使用QueryParser將可讀性較好的查詢語句(比如查詢的詞lucene ,以及一些高級方式lucene AND .net)轉化為Lucene內部使用的查詢對象.

第三步執行搜索.并將結果返回到hits集合.需要注意的是Lucene并不是一次將所有的結果放入hits中而是采取一次放一部分的方式.出于空間考慮.

作者 idior ??

2005-03-16 22:36

?

Lucene.net?系列二?--- index?一詳細介紹了有關Lucene.net索引添加刪除更新的詳細內容.并給出了所有的TestCase供學習參考.

Lucene建立Index的過程:

1.???????抽取文本.

?? 比如將PDF以及Word中的內容以純文本的形式提取出來.Lucene所支持的類型主要為String,為了方便同時也支持Date 以及Reader.其實如果使用這兩個類型lucene會自動進行類型轉換.

2.???????文本分析.

?? Lucene將針對所給的文本進行一些最基本的分析,并從中去除一些不必要的信息,比如一些常用字a ,an, the 等等,如果搜索的時候不在乎字母的大小寫, 又可以去掉一些不必要的信息.總而言之你可以把這個過程想象成一個文本的過濾器,所有的文本內容通過分析, 將過濾掉一些內容,剩下最有用的信息.

3.???????寫入index.

和google等常用的索引技術一樣lucene在寫index的時候都是采用的倒排索引技術(inverted index.) 簡而言之,就是通過某種方法(類似hash表?)將常見的”一篇文檔中含有哪些詞”這個問題轉成”哪篇文檔中有這些詞”. 而各個搜索引擎的索引機制的不同主要在于如何為這張倒排表添加更準確的描述.比如google有名的PageRank因素.Lucene當然也有自己的技術,希望在以后的文章中能為大家加以介紹.

在上一篇文章中,使用了最基本的建立索引的方法.在這里將對某些問題加以詳細的討論.

1. 添加Document至索引
上次添加的每份文檔的信息是一樣的,都是文檔的filename和contents.

doc.Add(Field.Keyword("filename", file.FullName));
doc.Add(Field.Text("contents", new StreamReader(file.FullName)));

在Lucene中對每個文檔的描述是可以不同的,比如,兩份文檔都是描述一個人,其中一個添加的是name, age 另一個添加的是id, sex ,這種不規則的文檔描述在Lucene中是允許的.
還有一點Lucene支持對Field進行Append , 如下:

string baseWord = "fast";
string synonyms[] = String {"quick", "rapid", "speedy"};
Document doc = new Document();
doc.Add(Field.Text("word", baseWord));
for (int i = 0; i < synonyms.length; i++)?
??? doc.Add(Field.Text("word", synonyms[i]));

這點純粹是為了方便用戶的使用.在內部Lucene自動做了轉化,效果和將它們拼接好再存是一樣.

2.?刪除索引中的文檔

??? 這一點Lucene所采取的方式比較怪,它使用IndexReader來對要刪除的項進行標記,然后在Reader Close的時候一起刪除.
這里簡要介紹幾個方法.

[TestFixture]
public class DocumentDeleteTest : BaseIndexingTestCase?? // BaseIndexingTestCase
中的SetUp方法?????????? ??????????????????????????????????? //建立了索引其中加入了兩個Document
{
??? [Test]
??? public void testDeleteBeforeIndexMerge()
??? {
????
??????? IndexReader reader = IndexReader.Open(dir);? //
當前索引中有兩個Document

??????? Assert.AreEqual(2, reader.MaxDoc());?? //文檔從0開始計數,MaxDoc表示下一個文檔的序號

??????? Assert.AreEqual(2, reader.NumDocs());? //NumDocs表示當前索引中文檔的個數??
??????? reader.Delete(1);?????????????????? //
對標號為1的文檔標記為待刪除,邏輯刪除
??????? Assert.IsTrue(reader.IsDeleted(1));???????? //檢測某個序號的文檔是否被標記刪除
??????? Assert.IsTrue(reader.HasDeletions());?????? //檢測索引中是否有Document被標記刪除?
??????? Assert.AreEqual(2, reader.MaxDoc());??????? //
當前下一個文檔序號仍然為2
??????? Assert.AreEqual(1, reader.NumDocs());?????? //
當前索引中文檔數變成1
??????? reader.Close();???????????????????????????? //
此時真正從物理上刪除之前被標記的文檔
??????? reader = IndexReader.Open(dir);
??????? Assert.AreEqual(2, reader.MaxDoc());?????????
??????? Assert.AreEqual(1, reader.NumDocs());
??????? reader.Close();
??? }

??? [Test]
??? public void DeleteAfterIndexMerge()????//
在索引重排之后
??? {
??????? IndexReader reader = IndexReader.Open(dir);
??????? Assert.AreEqual(2, reader.MaxDoc());
??????? Assert.AreEqual(2, reader.NumDocs());
??????? reader.Delete(1);
??????? reader.Close();
??????? IndexWriter writer = new IndexWriter(dir, GetAnalyzer(), false);
??????? writer.Optimize();?????????????????//
索引重排
??????? writer.Close();
??????? reader = IndexReader.Open(dir);
??????? Assert.IsFalse(reader.IsDeleted(1));
??????? Assert.IsFalse(reader.HasDeletions());
??????? Assert.AreEqual(1, reader.MaxDoc());?????? //
索引重排后,下一個文檔序號變為1
??????? Assert.AreEqual(1, reader.NumDocs());
??????? reader.Close();
??? }
}


當然你也可以不通過文檔序號進行刪除工作.采用下面的方法,可以從索引中刪除包含特定的內容文檔.

IndexReader reader = IndexReader.Open(dir);
reader.Delete(new Term("city", "Amsterdam"));
reader.Close();

你還可以通過reader.UndeleteAll()這個方法取消前面所做的標記,即在read.Close()調用之前取消所有的刪除工作

3.?更新索引中的文檔

?? 這個功能Lucene沒有支持, 只有通過刪除后在添加來實現. 看看代碼,很好理解的.

[TestFixture]
public class DocumentUpdateTest : BaseIndexingTestCase
{
??? [Test]
??? public void Update()
??? {
??????? Assert.AreEqual(1, GetHitCount("city", "Amsterdam"));
??????? IndexReader reader = IndexReader.Open(dir);
??????? reader.Delete(new Term("city", "Amsterdam"));
??????? reader.Close();
??????? Assert.AreEqual(0, GetHitCount("city", "Amsterdam"));
??????? IndexWriter writer = new IndexWriter(dir, GetAnalyzer(),false);
??????? Document doc = new Document();
??????? doc.Add(Field.Keyword("id", "1"));

?

??????? doc.Add(Field.UnIndexed("country", "Netherlands"));
??????? doc.Add(Field.UnStored("contents","Amsterdam has lots of bridges"));
??????? doc.Add(Field.Text("city", "Haag"));
??????? writer.AddDocument(doc);
??????? writer.Optimize();
??????? writer.Close();
??????? Assert.AreEqual(1, GetHitCount("city", "Haag"));
??? }

?

??? protected override Analyzer GetAnalyzer()
??? {
??????? return new WhitespaceAnalyzer();? //
注意此處如果用SimpleAnalyzer搜索會失敗,因為建立索引的時候使用的SimpleAnalyse它會將所有字母變成小寫.

??? }

??? private int GetHitCount(String fieldName, String searchString)
??? {
??????? IndexSearcher searcher = new IndexSearcher(dir);
??????? Term t = new Term(fieldName, searchString);
??????? Query query = new TermQuery(t);
??????? Hits hits = searcher.Search(query);
??????? int hitCount = hits.Length();
??????? searcher.Close();
??????? return hitCount;
??? }
}

??? 需要注意的是以上所有有關索引的操作,為了避免頻繁的打開和關閉Writer和Reader.又由于添加和刪除是不同的連接(Writer, Reader)做的.所以應該盡可能的將添加文檔的操作放在一起批量執行,然后將刪除文檔的操作也放在一起批量執行.避免添加刪除交替進行.

Lucene.net?系列三?--- index?本文將進一步討論有關Lucene.net建立索引的問題:

主要包含以下主題:
1.索引的權重
2.利用IndexWriter 屬性對建立索引進行高級管理
3.利用RAMDirectory充分發揮內存的優勢
4.利用RAMDirectory并行建立索引
5.控制索引內容的長度
6.Optimize 優化的是什么?

源代碼下載

本文將進一步討論有關Lucene.net建立索引的問題:

索引的權重
根據文檔的重要性的不同,顯然對于某些文檔你希望提高權重以便將來搜索的時候,更符合你想要的結果. 下面的代碼演示了如何提高符合某些條件的文檔的權重.

比如對公司內很多的郵件做了索引,你當然希望主要查看和公司有關的郵件,而不是員工的個人郵件.這點根據郵件的地址就可以做出判斷比如包含@alphatom.com的就是公司郵件,而@gmail.com等等就是私人郵件.如何提高相應郵件的權重? 代碼如下:

???? public static? String COMPANY_DOMAIN = "alphatom.com";
???? Document doc = new Document();
???? String senderEmail = GetSenderEmail();
???? String senderName = getSenderName();
???? String subject = GetSubject();
???? String body = GetBody();
???? doc.Add(Field.Keyword("senderEmail”, senderEmail));
???? doc.Add(Field.Text("senderName", senderName));
???? doc.Add(Field.Text("subject", subject));
???? doc.Add(Field.UnStored("body", body));

???? if (GetSenderDomain().EndsWith(COMPANY_DOMAIN))?

????//如果是公司郵件,提高權重,默認權重是1.0
???? ????? doc.SetBoost(1.5);???????????????????????
???? else?????????????????????????//如果是私人郵件,降低權重.
???? ????? doc.SetBoost(0.1);

???? writer.AddDocument(doc);

不僅如此你還可以對Field也設置權重.比如你對郵件的主題更感興趣.就可以提高它的權重.???

????Field senderNameField = Field.Text("senderName", senderName);

???? Field subjectField = Field.Text("subject", subject);
???? subjectField.SetBoost(1.2);
lucene搜索的時候會對符合條件的文檔按匹配的程度打分,這點就和google的PageRank有點類似, 而SetBoost中的Boost就是其中的一個因素,當然還有其他的因素.這要放到搜索里再說.

利用IndexWriter?變量對建立索引進行高級管理
在建立索引的時候對性能影響最大的地方就是在將索引寫入文件的時候, 所以在具體應用的時候就需要對此加以控制.

在建立索引的時候對性能影響最大的地方就是在將索引寫入文件的時候所以在具體應用的時候就需要對此加以控制

IndexWriter屬性??

默認值

描述

MergeFactory

10

控制segment合并的頻率和大小

MaxMergeDocs

Int32.MaxValue

限制每個segment中包含的文檔數

MinMergeDocs

10

當內存中的文檔達到多少的時候再寫入segment

?

Lucene默認情況是每加入10份文檔就從內存往index文件寫入并生成一個segement,然后每10個segment就合并成一個segment.通過MergeFactory這個變量就可以對此進行控制.

MaxMergeDocs用于控制一個segment文件中最多包含的Document數.比如限制為100的話,即使當前有10個segment也不會合并,因為合并后的segmnet將包含1000個文檔,超過了限制.

MinMergeDocs用于確定一個當內存中文檔達到多少的時候才寫入文件,該項對segment的數量和大小不會有什么影響,它僅僅影響內存的使用,進一步影響寫索引的效率.

為了生動的體現這些變量對性能的影響,用一個小程序對此做了說明.

這里有點不可思議.Lucene in Action書上的結果比我用dotLucene做的結果快了近千倍.這里給出書中用Lucene的數據,希望大家比較一下看看是不是我的問題.

Lucene in Action書中的數據:

% java lia.indexing.IndexTuningDemo 100000 10 9999999 10
Merge factor: 10
Max merge docs: 9999999
Min merge docs: 10
Time: 74136 ms
% java lia.indexing.IndexTuningDemo 100000 100 9999999 10
Merge factor: 100
Max merge docs: 9999999
Min merge docs: 10
Time: 68307 ms
我的數據: 336684128 ms
可以看出MinMergeDocs(主要用于控制內存)和MergeFactory(控制合并的次數和合并后的大小) 對建立索引有顯著的影響.但是并不是MergeFactory越大越好,因為如果一個segment的文檔數很多的話,在搜索的時候必然也會影響效率,所以這里MergeFactory的取值是一個需要平衡的問題.而MinMergeDocs主要受限于內存.

利用RAMDirectory充分發揮內存的優勢

從上面來看充分利用內存的空間,減少讀寫文件(寫入index)的次數是優化建立索引的重要方法.其實在Lucene中提供了更強大的方法來利用內存建立索引.使用RAMDirectory來替代FSDirectory. 這時所有的索引都將建立在內存當中,這種方法對于數據量小的搜索業務很有幫助,同時可以使用它來進行一些小的測試,避免在測試時頻繁建立刪除索引文件.

在實際應用中RAMDirectory和FSDirectory協作可以更好的利用內存來優化建立索引的時間.

具體方法如下:

1.建立一個使用FSDirectory的IndexWriter

2 .建立一個使用RAMDirectory的IndexWriter

3 把Document添加到RAMDirectory中

4 當達到某種條件將RAMDirectory 中的Document寫入FSDirectory.

5 重復第三步

示意代碼:
???? ?private FSDirectory fsDir = FSDirectory.GetDirectory("index",true);?

? ??? ?private RAMDirectory ramDir = new RAMDirectory();

?????? private IndexWriter fsWriter = IndexWriter(fsDir,new SimpleAnalyzer(), true);
?????? private IndexWriter ramWriter = new IndexWriter(ramDir,new SimpleAnalyzer(), true);
?????? while (there are documents to index)?
????? {
???????? ramWriter.addDocument(doc);
???????? if (condition for flushing memory to disk has been met)?
???????? {
?????????? fsWriter.AddIndexes(Directory[]{ramDir}) ;
?????????? ramWriter.Close();????????? //why not support flush?
?????????? ramWriter =new IndexWriter(ramDir,new SimpleAnalyzer(),true);
???????? }
???? }

這里的條件完全由用戶控制,而不是FSDirectory采用對Document計數的方式控制何時寫入文件.相比之下有更大的自由性,更能提升性能.

利用RAMDirectory并行建立索引

RAMDirectory還提供了使用多線程來建立索引的可能性.下面這副圖很好的說明了這一點.

?

?

甚至你可以在一個高速的網絡里使用多臺計算機來同時建立索引.就像下面這種圖所示.

?

?

雖然有關并行同步的問題需要你自己進行處理,不過通過這種方式可以大大提高對大量數據建立索引的能力.

?

控制索引內容的長度.

在我的一篇速遞介紹過Google Desktop Search只能搜索到文本中第5000個字的.也就是google在建立索引的時候只考慮前5000個字,在Lucene中同樣也有這個配置功能.

Lucene對一份文本建立索引時默認的索引長度是10,000. 你可以通過IndexWriter 的MaxFieldLength屬性對此加以修改.還是用一個例子說明問題.?

???? [Test]
???? public void FieldSize()???????
???? // AddDocuments 和 GetHitCount都是自定義的方法,詳見源代碼
???? {
???????? AddDocuments(dir, 10);???????
???????? //第一個參數是目錄,第二個配置是索引的長度
???????? Assert.AreEqual(1, GetHitCount("contents", "bridges"))
???????? //原文檔的contents為”Amsterdam has lots of bridges”
???????? //當索引長度為10個字時能找到bridge
???????? AddDocuments(dir, 1);
???????? Assert.AreEqual(0, GetHitCount("contents", "bridges"));
???????? //當索引長度限制為1個字時就無法發現第5個字bridges
???? }

???對索引內容限長往往是處于效率和空間大小的考慮.能夠對此進行配置是建立索引必備的一個功能.

Optimize?優化的是什么?

在以前的例子里,你可能已經多次見過writer.Optimize()這段代碼.Optimize到底做了什么?

讓你吃驚的是這里的優化對于建立索引不僅沒有起到加速的作用,反而是延長了建立索引的時間.為什么?

因為這里的優化不是為建立索引做的,而是為搜索做的.之前我們提到Lucene默認每遇到10個Segment就合并一次,盡管如此在索引完成后仍然會留下幾個segmnets,比如6,7.

而Optimize的過程就是要減少剩下的Segment的數量,盡量讓它們處于一個文件中.

它的過程很簡單,就是新建一個空的Segmnet,然后把原來的幾個segmnet全合并到這一個segmnet中,在此過程中,你的硬盤空間會變大,因為同時存在兩份一樣大小的索引.不過在優化完成后,Lucene會自動將原來的多份Segments刪除,只保留最后生成的一份包含原來所有索引的segment.

盡量減少segments的個數主要是為了增加查詢的效率.假設你有一個Server,同時有很多的Client建立了各自不同的索引,如果此時搜索,那么必然要同時打開很多的索引文件,這樣顯然會受到很大的限制,對性能產生影響.

當然也不是隨時做Optimize就好,如前所述做優化時要花費更多的時間和空間,而且在做優化的時候是不能進行查詢的.所以索引建立的后期,并且索引的內容不會再發生太多的變化的時候做優化是一個比較好的時段.

?

Lucene.net?系列四?--- index?本文將介紹有關索引并發控制的問題,以結束對Lucene.net建立索引問題的討論.

1. 允許任意多的讀操作并發.即可以有任意多的用戶在同一時間對同一份索引做查詢工作.

2.?允許任意多的讀操作在索引被正在被修改的時候進行.即哪怕索引正在被優化,添加刪除文檔,這時也是允許用戶對索引進行查詢工作. (it’s so cool.)

3.?同一時間只允許一個對索引修改的操作.即同一時間只允許IndexWriter或IndexReader打開同一份索引.不能允許兩個同時打開一份索引.

Lucene提供了幾種對索引進行讀寫的操作.添加文檔到索引,從索引中刪除文檔,優化索引,合并Segments.這些都是對索引進行寫操作的方法. 查詢的時候就會讀取索引的內容.

有關索引并發的問題是一個比較重要的問題,而且是Lucene的初學者容易忽略的問題,當索引被破壞,或者程序突然出現異常的時候初學者往往不知道是自己的誤操作造成的.

下面讓我們看看Lucene是如何處理索引文件的并發控制的.

首先記住一下三點準則:

1. 允許任意多的讀操作并發.即可以有任意多的用戶在同一時間對同一份索引做查詢工作.

2.?允許任意多的讀操作在索引被正在被修改的時候進行.即哪怕索引正在被優化,添加刪除文檔,這時也是允許用戶對索引進行查詢工作. (it’s so cool.)

3.?同一時間只允許一個對索引修改的操作.即同一時間只允許IndexWriter或IndexReader打開同一份索引.不能允許兩個同時打開一份索引.

第一個準則很容易理解,第二個準則說明Lucene對并發的操作支持還是不錯的.第三個準則也很正常,不過需要注意的是第三個準則只是表明IndexWriter和IndexReader不能并存,而沒有反對在多線程中利用同一個IndexWriter對索引進行修改.這個功能可是經常用到的,所以不要以為它是不允許的.不過這個時候的并發就需要你自己加以控制,以免出現沖突.

(注: 在前面的系列中已說過IndexReader不是對Index進行讀操作,而是從索引中刪除docuemnt時使用的對象)

有關這三個原則在實際使用Lucene API時候的體現,讓我們先看看下面這張表:


表中列出了有關索引的主要讀寫操作.其中空白處表示X軸的操作和Y軸的操作允許并發.

而X處表明X軸的操作和Y軸的操作不允許同時進行.

比如Add document到索引的時候不允許同時從索引中刪除document.

其實以上這張表就是前面三個準則的體現.Add Optimize Merge操作都是由IndexWriter來做的.而Delete則是通過IndexReader完成.所以表中空白處正是第一條和第二條準則的體現,而X(沖突)處正是第三個原則的具體表現.

?

為了在不了解并發控制的情況下對Lucene API的亂用. Lucene提供了基于文件的鎖機制以確保索引文件不會被破壞.

當你對index 進行修改的時候, 比如添加刪除文檔的時候就會產生 ***write.lock文件,而當你從segment進行讀取信息或者合并segments的時候就會產生***commit.lock文件.在默認情況下,這些文件是放在系統臨時文件夾下的. 簡而言之, write.lock文件存在的時間比較長,也就是對index進行修改的鎖時間比較長,而commit.lock存在的時間往往很短.具體情況見下表.

?

如果索引存在于server, 很多clients想訪問的時候,自然希望能看到其他用戶的鎖文件,這時把鎖文件放到系統臨時文件夾就不好了.此時可以通過配置文件來改變鎖文件存放的位置.

比如在一個asp.net的應用下,你就可以象下面這樣利用web.config文件來實現你的目的.

<configuration>
??? <appSettings>
??????? <add key="Lucene.Net.lockdir" value="c:yourdir" />
??? </appSettings>
</configuration>

不僅如此,在某些情況下比如你的索引文件存放在一個CD-ROM中,這時根本就無法對索引進行修改,也就不存在所謂的并發沖突,這種情況下你甚至可以講鎖文件的機制取消掉.同樣通過配置文件.

<configuration>
??? <appSettings>
??????? <add key="disableLuceneLocks" value="true" />
??? </appSettings>
</configuration>

不過請注意不要亂用此功能,不然你的索引文件將不再受到安全的保護.

下面用一個例子說明鎖機制的體現.

using System;
using System.IO;
using Lucene.Net.Analysis;
using Lucene.Net.Index;
using Lucene.Net.Store;
using NUnit.Framework;
using Directory = Lucene.Net.Store.Directory;


[TestFixture]
public class LockTest
{
?private Directory dir;

?[SetUp]
?public void Init()
?{
? String indexDir = "index";
? dir = FSDirectory.GetDirectory(indexDir, true);
?}

?[Test]
?[ExpectedException(typeof(IOException))]
?public void WriteLock()
?{
? IndexWriter writer1 = null;
? IndexWriter writer2 = null;
? try
? {
?? writer1 = new IndexWriter(dir, new SimpleAnalyzer(), true);
?? writer2 = new IndexWriter(dir, new SimpleAnalyzer(), true);
???
? }
? catch (IOException e)
? {
?? Console.Out.WriteLine(e.StackTrace);
? }
? finally
? {
?? writer1.Close();
?? Assert.IsNull(writer2);
? }
?}

?[Test]
?public void CommitLock()
?{
? IndexReader reader1 = null;
? IndexReader reader2 = null;
? try
? {
?? IndexWriter writer = new IndexWriter(dir, new SimpleAnalyzer(),
??????????????????????????????????????? true);
?? writer.Close();
?? reader1 = IndexReader.Open(dir);
?? reader2 = IndexReader.Open(dir);
? }
? finally
? {
?? reader1.Close();
?? reader2.Close();
? }
?}
}

不過很令人失望的是在Lucene(Java)中應該收到的異常在dotLucene(1.4.3)我卻沒有捕獲到.隨后我在dotLucene的論壇上問了一下,至今尚未有解答.這也是開源項目的無奈了吧.

?

?

Lucene.net?系列五?--- search?在前面的系列我們一直在介紹有關索引建立的問題,現在是該利用這些索引來進行搜索的時候了,Lucene良好的架構使得我們只需要很少的幾行代碼就可以為我們的應用加上搜索的功能,首先讓我們來認識一下搜索時最常用的幾個類.

查詢特定的某個概念

當我們搜索完成的時候會返回一個按Sorce排序的結果集Hits. 這里的Score就是接近度的意思,象Google那樣每個頁面都會有一個分值,搜索結果按分值排列. 如同你使用Google一樣,你不可能查看所有的結果, 你可能只查看第一個結果所以Hits返回的不是所有的匹配文檔本身, 而僅僅是實際文檔的引用. 通過這個引用你可以獲得實際的文檔.原因很好理解, 如果直接返回匹配文檔,數據量太大,而很多的結果你甚至不會去看, 想想你會去看Google 搜索結果10頁以后的內容嗎?

下面用一個例子來簡要介紹一下Search

先建立索引

namespace dotLucene.inAction.BasicSearch
{
???? [TestFixture]
???? public class BaseIndexingTestCase
???? {
???????? protected String[] keywords = {"1930110994", "1930110995"};

???????? protected String[] unindexed = {"Java Development with Ant", "JUnit in Action"};

???????? protected String[] unstored = {
????????????? "we have ant and junit",
????????????? "junit use a mock,ant is also",
???????? };

???????? protected String[] text1 = {
???????? ???? "ant junit",
????????????? "junit mock"
???????? };

???????? protected String[] text2 = {
????????????? "200206",
????????????? "200309"
???????? };

???????? protected String[] text3 = {
????????????? "/Computers/Ant", "/Computers/JUnit"
???????? };

???????? protected Directory dir;

???????? [SetUp]
???????? protected void Init()
???????? {
????????????? string indexDir = "index";
????????????? dir = FSDirectory.GetDirectory(indexDir, true);
????????????? AddDocuments(dir);
???????? }

???????? protected void AddDocuments(Directory dir)
???????? {
????????????? IndexWriter writer=new IndexWriter(dir, GetAnalyzer(), true);

????????????? for (int i = 0; i < keywords.Length; i++)
????????????? {

?????????????????? Document doc = new Document();
?????????????????? doc.Add(Field.Keyword("isbn", keywords[i]));
?????????????????? doc.Add(Field.UnIndexed("title", unindexed[i]));
?????????????????? doc.Add(Field.UnStored("contents", unstored[i]));
?????????????????? doc.Add(Field.Text("subject", text1[i]));
?????????????????? doc.Add(Field.Text("pubmonth", text2[i]));
?????????????????? doc.Add(Field.Text("category", text3[i]));
?????????????????? writer.AddDocument(doc);

????????????? }
?????????
????????????? writer.Optimize();
????????????? writer.Close();

???????? }


???????? protected virtual Analyzer GetAnalyzer()
???????? {
????????????? PerFieldAnalyzerWrapper analyzer = new PerFieldAnalyzerWrapper(
?????????????????? new SimpleAnalyzer());
????????????? analyzer.AddAnalyzer("pubmonth", new WhitespaceAnalyzer());
????????????? analyzer.AddAnalyzer("category", new WhitespaceAnalyzer());
????????????? return analyzer;
???????? }
???? }
}
這里用到了一些有關Analyzer的知識,將放在以后的系列中介紹.

查詢特定的某個概念

然后利用利用TermQery來搜索一個Term(你可以把它理解為一個Word)

?????????[Test]
???????? public void Term()
???????? {
????????????? IndexSearcher searcher = new IndexSearcher(directory);
????????????? Term t = new Term("subject", "ant");
????????????? Query query = new TermQuery(t);
????????????? Hits hits = searcher.Search(query);
????????????? Assert.AreEqual(1, hits.Length(), "JDwA");

????????????? t = new Term("subject", "junit");
????????????? hits = searcher.Search(new TermQuery(t));
????????????? Assert.AreEqual(2, hits.Length());

????????????? searcher.Close();
???????? }


利用QueryParse簡化查詢語句

顯然對于各種各樣的查詢(與或關系,等等各種復雜的查詢,在下面將介紹),你不希望一一對應的為它們寫出相應的XXXQuery. Lucene已經為你考慮到了這點, 通過使用QueryParse這個類, 你只需要寫出我們常見的搜索語句, Lucene會在內部自動做一個轉換.

這個過程有點類似于數據庫搜索, 我們已經習慣于使用SQL查詢語句,其實在數據庫的內部是要做一個轉換的, 因為數據庫不認得SQL語句,它只認得查詢語法樹.

讓我們來看一個例子.

???????? [Test]
???????? public void TestQueryParser()
???????? {
????????????? IndexSearcher searcher = new IndexSearcher(directory);

????????????? Query query = QueryParser.Parse("+JUNIT +ANT -MOCK",
????????????? ??????????????????????????????? "contents",
????????????? ??????????????????????????????? new SimpleAnalyzer());
????????????? Hits hits = searcher.Search(query);
????????????? Assert.AreEqual(1, hits.Length());
????????????? Document d = hits.Doc(0);
????????????? Assert.AreEqual("Java Development with Ant", d.Get("title"));

????????????? query = QueryParser.Parse("mock OR junit",
????????????? ????????????????????????? "contents",
????????????? ????????????????????????? new SimpleAnalyzer());
????????????? hits = searcher.Search(query);
????????????? Assert.AreEqual(2, hits.Length(), "JDwA and JIA");
???????? }

由以上的代碼可以看出我們不需要為每種特定查詢而去設定XXXQuery 通過QueryParse類的靜態方法Parse就可以很方便的將可讀性好的查詢口語轉換成Lucene內部所使用的各種復雜的查詢語句. 有一點需要注意:在Parse方法中我們使用了SimpleAnalyzer, 這時候會將查詢語句做一些變換,比如這里將JUNIT 等等大寫字母變成了小寫字母,所以才能搜索到(因為我們在建立索引的時候使用的是小寫),如果你將StanderAnalyzer變成WhitespaceAnalyzer就會搜索不到.具體原理以后再說.

+A +B表示A和B要同時存在,-C表示C不存在,A OR B表示A或B二者有一個存在就可以..具體的查詢規則如下:

?

其中title等等的field表示你在建立索引時所采用的屬性名.

?

?

Lucene.net系列六?-- search?本文主要結合測試案例介紹了Lucene下的各種查詢語句以及它們的簡化方法.

通過本文你將了解Lucene的基本查詢語句,并可以學習所有的測試代碼已加強了解.

源代碼下載

具體的查詢語句

在了解了SQL后, 你是否想了解一下查詢語法樹?在這里簡要介紹一些能被Lucene直接使用的查詢語句.

1.???????? TermQuery
查詢某個特定的詞,在文章開始的例子中已有介紹.常用于查詢關鍵字.

???????????? [Test]
???????? public void Keyword()
???????? {
????????????? IndexSearcher searcher = new IndexSearcher(directory);
????????????? Term t = new Term("isbn", "1930110995");
????????????? Query query = new TermQuery(t);
????????????? Hits hits = searcher.Search(query);
????????????? Assert.AreEqual(1, hits.Length(), "JUnit in Action");
???????? }

注意Lucene中的關鍵字,是需要用戶去保證唯一性的.

?TermQueryQueryParse

只要在QueryParse的Parse方法中只有一個word,就會自動轉換成TermQuery.

2.???????? RangeQuery
用于查詢范圍,通常用于時間,還是來看例子:

namespace dotLucene.inAction.BasicSearch
{
???? public class RangeQueryTest : LiaTestCase
???? {
???????? private Term begin, end;

???????? [SetUp]
???????? protected override void Init()
???????? {
????????????? begin = new Term("pubmonth", "200004");

????????????? end = new Term("pubmonth", "200206");
????????????? base.Init();
???????? }

???????? [Test]
???????? public void Inclusive()
???????? {
????????????? RangeQuery query = new RangeQuery(begin, end, true);
????????????? IndexSearcher searcher = new IndexSearcher(directory);

????????????? Hits hits = searcher.Search(query);
????????????? Assert.AreEqual(1, hits.Length());
???????? }

???????? [Test]
???????? public void Exclusive()
???????? {
????????????? RangeQuery query = new RangeQuery(begin, end, false);
????????????? IndexSearcher searcher = new IndexSearcher(directory);

????????????? Hits hits = searcher.Search(query);
????????????? Assert.AreEqual(0, hits.Length());
???????? }

???? }
}

RangeQuery的第三個參數用于表示是否包含該起止日期.

RangeQueryQueryParse

????????????? [Test]
???????? public void TestQueryParser()
???????? {
????????????? Query query = QueryParser.Parse("pubmonth:[200004 TO 200206]", "subject", new SimpleAnalyzer());
????????????? Assert.IsTrue(query is RangeQuery);
????????????? IndexSearcher searcher = new IndexSearcher(directory);
????????????? Hits hits = searcher.Search(query);

????????????? query = QueryParser.Parse("{200004 TO 200206}", "pubmonth", new SimpleAnalyzer());
????????????? hits = searcher.Search(query);
????????????? Assert.AreEqual(0, hits.Length(), "JDwA in 200206");
???????? }

Lucene用[] 和{}分別表示包含和不包含.

3.???PrefixQuery

用于搜索是否包含某個特定前綴,常用于Catalog的檢索.

???????????[Test]
???????? public? void? TestPrefixQuery()
???????? {
????????????? PrefixQuery query = new PrefixQuery(new Term("category", "/Computers"));

???????????? ?IndexSearcher searcher = new IndexSearcher(directory);
????????????? Hits hits = searcher.Search(query);
????????????? Assert.AreEqual(2, hits.Length());
??????????????
????????????? query = new PrefixQuery(new Term("category", "/Computers/JUnit"));
????????????? hits = searcher.Search(query);
????????????? Assert.AreEqual(1, hits.Length(), "JUnit in Action");
???????? }

PrefixQueryQueryParse

??????????? ??[Test]
???????? public void TestQueryParser()
???????? {

????????????? QueryParser qp = new QueryParser("category", new SimpleAnalyzer());
????????????? qp.SetLowercaseWildcardTerms(false);
????????????? Query query =qp.Parse("/Computers*");
????????????? Console.Out.WriteLine("query = {0}", query.ToString());
????????????? IndexSearcher searcher = new IndexSearcher(directory);
????????????? Hits hits = searcher.Search(query);
????????????? Assert.AreEqual(2, hits.Length());
????????????? query =qp.Parse("/Computers/JUnit*");
????????????? hits = searcher.Search(query);
????????????? Assert.AreEqual(1, hits.Length(), "JUnit in Action");
???????? }

這里需要注意的是我們使用了QueryParser對象,而不是QueryParser類. 原因在于使用對象可以對QueryParser的一些默認屬性進行修改.比如在上面的例子中我們的category是大寫的,而QueryParser默認會把所有的含*的查詢字符串變成小寫/computer*. 這樣我們就會查不到原文中的/Computers* ,所以我們需要通過設置QueryParser的默認屬性來改變這一默認選項.即qp.SetLowercaseWildcardTerms(false)所做的工作.

4.????BooleanQuery

用于測試滿足多個條件.

下面兩個例子用于分別測試了滿足與條件和或條件的情況.

???????? [Test]
???????? public void And()
???????? {
????????????? TermQuery searchingBooks =
?????????????????? new TermQuery(new Term("subject", "junit"));

????????????? RangeQuery currentBooks =
?????????????????? new RangeQuery(new Term("pubmonth", "200301"),
?????????????????? ?????????????? new Term("pubmonth", "200312"),
?????????????????? ?????????????? true);
????????????? BooleanQuery currentSearchingBooks = new BooleanQuery();
????????????? currentSearchingBooks.Add(searchingBooks, true, false);
????????????? currentSearchingBooks.Add(currentBooks, true, false);
????????????? IndexSearcher searcher = new IndexSearcher(directory);
????????????? Hits hits = searcher.Search(currentSearchingBooks);

????????????? AssertHitsIncludeTitle(hits, "JUnit in Action");
???????? }
???????? [Test]
???????? public void Or()
???????? {
????????????? TermQuery methodologyBooks = new TermQuery(
?????????????????? new Term("category",
?????????????????? ???????? "/Computers/JUnit"));
????????????? TermQuery easternPhilosophyBooks = new TermQuery(
?????????????????? new Term("category",
?????????????????? ???????? "/Computers/Ant"));
????????????? BooleanQuery enlightenmentBooks = new BooleanQuery();
????????????? enlightenmentBooks.Add(methodologyBooks, false, false);
????????????? enlightenmentBooks.Add(easternPhilosophyBooks, false, false);
????????????? IndexSearcher searcher = new IndexSearcher(directory);
????????????? Hits hits = searcher.Search(enlightenmentBooks);
????????????? Console.Out.WriteLine("or = " + enlightenmentBooks);
????????????? AssertHitsIncludeTitle(hits, "Java Development with Ant");
????????????? AssertHitsIncludeTitle(hits, "JUnit in Action");

???????? }

什么時候是與什么時候又是或? 關鍵在于BooleanQuery對象的Add方法的參數.

參數一是待添加的查詢條件.

參數二Required表示這個條件必須滿足嗎? True表示必須滿足, False表示可以不滿足該條件.

參數三Prohibited表示這個條件必須拒絕嗎? True表示這么滿足這個條件的結果要排除, False表示可以滿足該條件.

這樣會有三種組合情況,如下表所示:

?

BooleanQueryQueryParse

???????? [Test]
???????? public void TestQueryParser()
???????? {
????????????? Query query = QueryParser.Parse("pubmonth:[200301 TO 200312] AND junit", "subject", new SimpleAnalyzer());
????????????? IndexSearcher searcher = new IndexSearcher(directory);
????????????? Hits hits = searcher.Search(query);
????????????? Assert.AreEqual(1, hits.Length());
????????????? query = QueryParser.Parse("/Computers/JUnit OR /Computers/Ant", "category", new WhitespaceAnalyzer());
????????????? hits = searcher.Search(query);
????????????? Assert.AreEqual(2, hits.Length());
???????? }

注意AND和OR的大小 如果想要A與非B 就用 A AND –B 表示, +A –B也可以.

默認的情況下QueryParser會把空格認為是或關系,就象google一樣.但是你可以通過QueryParser對象修改這一屬性.

[Test]
???????? public void TestQueryParserDefaultAND()
???????? {
????????????? QueryParser qp = new QueryParser("subject", new SimpleAnalyzer());
??????????? ??qp.SetOperator(QueryParser.DEFAULT_OPERATOR_AND );
????????????? Query query = qp.Parse("pubmonth:[200301 TO 200312] junit");
????????????? IndexSearcher searcher = new IndexSearcher(directory);
????????????? Hits hits = searcher.Search(query);
????????????? Assert.AreEqual(1, hits.Length());

???????? }
5.???????? PhraseQuery
查詢短語,這里面主要有一個slop的概念, 也就是各個詞之間的位移偏差, 這個值會影響到結果的評分.如果slop為0,當然最匹配.看看下面的例子就比較容易明白了,有關slop的計算用戶就不需要理解了,不過slop太大的時候對查詢效率是有影響的,所以在實際使用中要把該值設小一點.?PhraseQuery對于短語的順序是不管的,這點在查詢時除了提高命中率外,也會對性能產生很大的影響, 利用SpanNearQuery可以對短語的順序進行控制,提高性能.
????? ??[SetUp]
???? protected void Init()
???? {
???????? // set up sample document
???????? RAMDirectory directory = new RAMDirectory();
???????? IndexWriter writer = new IndexWriter(directory,
???????? ???????????????????????????????????? new WhitespaceAnalyzer(), true);
???????? Document doc = new Document();
???????? doc.Add(Field.Text("field",
???????? ?????????????????? "the quick brown fox jumped over the lazy dog"));
???????? writer.AddDocument(doc);
???????? writer.Close();

???????? searcher = new IndexSearcher(directory);
???? }
??????private bool matched(String[] phrase, int slop)
???? {
???????? PhraseQuery query = new PhraseQuery();
???????? query.SetSlop(slop);

???????? for (int i = 0; i < phrase.Length; i++)
???????? {
????????????? query.Add(new Term("field", phrase[i]));
???????? }

???????? Hits hits = searcher.Search(query);
???????? return hits.Length() > 0;
???? }

???? [Test]
???? public void SlopComparison()
???? {
???????? String[] phrase = new String[]{"quick", "fox"};

???????? Assert.IsFalse(matched(phrase, 0), "exact phrase not found");

???????? Assert.IsTrue(matched(phrase, 1), "close enough");
???? }

?????[Test]
???? public void Reverse()
???? {
???????? String[] phrase = new String[] {"fox", "quick"};

???????? Assert.IsFalse(matched(phrase, 2), "exact phrase not found");

???????? Assert.IsTrue(matched(phrase, 3), "close enough");
???? }

???? [Test]
???? public void Multiple()-
???? {
???????? Assert.IsFalse(matched(new String[] {"quick", "jumped", "lazy"}, 3), "not close enough");
???????? Assert.IsTrue(matched(new String[] {"quick", "jumped", "lazy"}, 4), "just enough");
???????? Assert.IsFalse(matched(new String[] {"lazy", "jumped", "quick"}, 7), "almost but not quite");
???????? Assert.IsTrue(matched(new String[] {"lazy", "jumped", "quick"}, 8), "bingo");
???? }

PhraseQueryQueryParse

利用QueryParse進行短語查詢的時候要先設定slop的值,有兩種方式如下所示

[Test]
???? public void TestQueryParser()
???? {
???????? Query q1 = QueryParser.Parse(""quick fox"",
????????????? "field", new SimpleAnalyzer());
???????? Hits hits1 = searcher.Search(q1);
???????? Assert.AreEqual(hits1.Length(), 0);

???????? Query q2 = QueryParser.Parse(""quick fox"~1",????????? //第一種方式
???????? ??????????????????????????? "field", new SimpleAnalyzer());
???????? Hits hits2 = searcher.Search(q2);
???????? Assert.AreEqual(hits2.Length(), 1);

???????? QueryParser qp = new QueryParser("field", new SimpleAnalyzer());
???????? qp.SetPhraseSlop(1);??????????????????????????????????? //第二種方式
???????? Query q3=qp.Parse(""quick fox"");
???????? Assert.AreEqual(""quick fox"~1", q3.ToString("field"),"sloppy, implicitly");
???????? Hits hits3 = searcher.Search(q2);
???????? Assert.AreEqual(hits3.Length(), 1);
???? }

6.???????? WildcardQuery
通配符搜索,需要注意的是child, mildew的分值是一樣的.?
???????? [Test]
???????? public void Wildcard()
???????? {
????????????? IndexSingleFieldDocs(new Field[]
?????????????????? {
?????????????????????? Field.Text("contents", "wild"),
?????????????????????? Field.Text("contents", "child"),
?????????????????????? Field.Text("contents", "mild"),
?????????????????????? Field.Text("contents", "mildew")
?????????????????? });
????????????? IndexSearcher searcher = new IndexSearcher(directory);
????????????? Query query = new WildcardQuery(
?????????????????? new Term("contents", "?ild*"));
????????????? Hits hits = searcher.Search(query);
????????????? Assert.AreEqual(3, hits.Length(), "child no match");
????????????? Assert.AreEqual(hits.Score(0), hits.Score(1), 0.0, "score the same");
????????????? Assert.AreEqual(hits.Score(1), hits.Score(2), 0.0, "score the same");
???????? }

WildcardQueryQueryParse
需要注意的是出于性能的考慮使用QueryParse的時候,不允許在開頭就使用就使用通配符.
同樣處于性能考慮會將只在末尾含有*的查詢詞轉換為PrefixQuery.
???????? [Test, ExpectedException(typeof (ParseException))]
???????? public void TestQueryParserException()
???????? {
????????????? Query query = QueryParser.Parse("?ild*", "contents", new WhitespaceAnalyzer());
???????? }

???????? [Test]
???????? public void TestQueryParserTailAsterrisk()
???????? {
????????????? Query query = QueryParser.Parse("mild*", "contents", new WhitespaceAnalyzer());
????????????? Assert.IsTrue(query is PrefixQuery);
????????????? Assert.IsFalse(query is WildcardQuery);

???????? }

???????? [Test]
???????? public void TestQueryParser()
???????? {
????????????? Query query = QueryParser.Parse("mi?d*", "contents", new WhitespaceAnalyzer());
????????????? Hits hits = searcher.Search(query);
????????????? Assert.AreEqual(2, hits.Length());
???????? }
7.???????? FuzzyQuery
模糊查詢, 需要注意的是兩個匹配項的分值是不同的,這點和WildcardQuery是不同的

???????? [Test]
???????? public void Fuzzy()
???????? {
????????????? Query query = new FuzzyQuery(new Term("contents", "wuzza"));
????????????? Hits hits = searcher.Search(query);
????????????? Assert.AreEqual( 2, hits.Length(),"both close enough");
????????????? Assert.IsTrue(hits.Score(0) != hits.Score(1),"wuzzy closer than fuzzy");
????????????? Assert.AreEqual("wuzzy", hits.Doc(0).Get("contents"),"wuzza bear");
???????? }


FuzzyQuery
QueryParse

注意和PhraseQuery中表示slop的區別,前者~后要跟數字.

???????? [Test]
???????? public void TestQueryParser()
???????? {
????????????? Query query =QueryParser.Parse("wuzza~","contents",new SimpleAnalyzer());
????????????? Hits hits = searcher.Search(query);
????????????? Assert.AreEqual( 2, hits.Length(),"both close enough");
???????? }

轉載于:https://www.cnblogs.com/huideng/p/3979307.html

總結

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

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

精品乱码久久久久久久 | 久久精品人人做人人综合试看 | 精品久久综合1区2区3区激情 | 在线播放无码字幕亚洲 | 国产成人无码一二三区视频 | 欧洲精品码一区二区三区免费看 | 久久久中文字幕日本无吗 | 欧美激情一区二区三区成人 | 狂野欧美性猛xxxx乱大交 | 久久国产自偷自偷免费一区调 | 伊在人天堂亚洲香蕉精品区 | 亚洲人交乣女bbw | 岛国片人妻三上悠亚 | 无遮无挡爽爽免费视频 | 在线看片无码永久免费视频 | 久久久久亚洲精品中文字幕 | 久久久亚洲欧洲日产国码αv | 精品无码av一区二区三区 | 又紧又大又爽精品一区二区 | 国产精品亚洲lv粉色 | 一本色道久久综合亚洲精品不卡 | 国产极品美女高潮无套在线观看 | 少妇高潮喷潮久久久影院 | 亚洲毛片av日韩av无码 | 日本一区二区三区免费播放 | 好屌草这里只有精品 | 天堂无码人妻精品一区二区三区 | 国产精品二区一区二区aⅴ污介绍 | 久久久av男人的天堂 | 丰腴饱满的极品熟妇 | 亚洲无人区一区二区三区 | 无码国产色欲xxxxx视频 | 精品偷拍一区二区三区在线看 | 久久久国产精品无码免费专区 | 人妻尝试又大又粗久久 | 最新版天堂资源中文官网 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 亚洲va中文字幕无码久久不卡 | 日韩人妻无码中文字幕视频 | 久久午夜夜伦鲁鲁片无码免费 | 在教室伦流澡到高潮hnp视频 | 中文字幕无码免费久久9一区9 | 狂野欧美激情性xxxx | 97人妻精品一区二区三区 | 国产亚洲精品久久久久久久久动漫 | 亚洲精品成人av在线 | 好男人www社区 | 精品国产一区二区三区av 性色 | 色 综合 欧美 亚洲 国产 | 无人区乱码一区二区三区 | 精品国产成人一区二区三区 | 极品嫩模高潮叫床 | 天天摸天天碰天天添 | 国产精品自产拍在线观看 | 又大又硬又爽免费视频 | 在线成人www免费观看视频 | 荡女精品导航 | 国产精品无码mv在线观看 | 色综合久久88色综合天天 | 国产精品办公室沙发 | 2019午夜福利不卡片在线 | 久久久国产精品无码免费专区 | 色一情一乱一伦一视频免费看 | 欧美人与物videos另类 | 免费网站看v片在线18禁无码 | 国产成人精品久久亚洲高清不卡 | 亚洲欧美日韩成人高清在线一区 | 国产精品无码一区二区三区不卡 | 亲嘴扒胸摸屁股激烈网站 | 国产午夜亚洲精品不卡下载 | 欧美一区二区三区 | 无套内谢的新婚少妇国语播放 | 国产人妻久久精品二区三区老狼 | 日本www一道久久久免费榴莲 | 无码国内精品人妻少妇 | 亚洲码国产精品高潮在线 | 亚洲午夜久久久影院 | 免费无码一区二区三区蜜桃大 | 18禁止看的免费污网站 | 免费观看黄网站 | 精品国产乱码久久久久乱码 | 久久久久亚洲精品男人的天堂 | 国产 浪潮av性色四虎 | 国产午夜精品一区二区三区嫩草 | 亚洲国产欧美国产综合一区 | 国精品人妻无码一区二区三区蜜柚 | 久久精品女人天堂av免费观看 | 性色欲网站人妻丰满中文久久不卡 | 中文字幕乱码亚洲无线三区 | 无码精品国产va在线观看dvd | 激情内射亚州一区二区三区爱妻 | 免费乱码人妻系列无码专区 | √8天堂资源地址中文在线 | 亚洲日韩av一区二区三区四区 | 18无码粉嫩小泬无套在线观看 | 精品人妻av区 | 国产一区二区不卡老阿姨 | 高清无码午夜福利视频 | 无码人妻精品一区二区三区下载 | 日本一区二区三区免费播放 | 久久精品国产99精品亚洲 | 久久无码人妻影院 | 风流少妇按摩来高潮 | 精品成人av一区二区三区 | 国产麻豆精品一区二区三区v视界 | 一本一道久久综合久久 | 鲁大师影院在线观看 | 小泽玛莉亚一区二区视频在线 | 人人妻人人澡人人爽人人精品 | 亚洲综合在线一区二区三区 | 香蕉久久久久久av成人 | 亚洲色www成人永久网址 | 亚洲国产一区二区三区在线观看 | 对白脏话肉麻粗话av | 日韩av激情在线观看 | 久久久久亚洲精品中文字幕 | 亚洲aⅴ无码成人网站国产app | 久久国语露脸国产精品电影 | 色窝窝无码一区二区三区色欲 | 国产成人综合美国十次 | 国产香蕉尹人视频在线 | 九九综合va免费看 | 日韩欧美成人免费观看 | 青草视频在线播放 | 四虎国产精品免费久久 | 国产精品久久久久久久9999 | 精品熟女少妇av免费观看 | 精品久久综合1区2区3区激情 | 国产在热线精品视频 | 98国产精品综合一区二区三区 | a在线观看免费网站大全 | 99riav国产精品视频 | 欧美日韩一区二区综合 | 国产真实乱对白精彩久久 | aⅴ在线视频男人的天堂 | 亚洲国产精品久久人人爱 | 水蜜桃色314在线观看 | 色老头在线一区二区三区 | 精品一区二区三区无码免费视频 | 精品厕所偷拍各类美女tp嘘嘘 | 国产激情精品一区二区三区 | 亚洲成a人片在线观看日本 | 日韩 欧美 动漫 国产 制服 | 日本又色又爽又黄的a片18禁 | 日韩无套无码精品 | 亚洲高清偷拍一区二区三区 | 极品嫩模高潮叫床 | 国产成人亚洲综合无码 | 在线天堂新版最新版在线8 | 人妻少妇精品视频专区 | 久久国产36精品色熟妇 | 国产女主播喷水视频在线观看 | 色情久久久av熟女人妻网站 | 性欧美牲交xxxxx视频 | 国产精品二区一区二区aⅴ污介绍 | 日日碰狠狠丁香久燥 | 亚洲色大成网站www | 国产精品-区区久久久狼 | 少妇愉情理伦片bd | 亚洲无人区午夜福利码高清完整版 | 又大又黄又粗又爽的免费视频 | 小sao货水好多真紧h无码视频 | 无码播放一区二区三区 | 综合网日日天干夜夜久久 | 日本一卡2卡3卡四卡精品网站 | 国产成人精品一区二区在线小狼 | 国产精品久久久午夜夜伦鲁鲁 | 人妻尝试又大又粗久久 | 国产成人无码一二三区视频 | 国产精品久久久av久久久 | 国产成人无码区免费内射一片色欲 | 亚洲精品一区二区三区在线观看 | 欧美午夜特黄aaaaaa片 | 自拍偷自拍亚洲精品10p | 无码国产乱人伦偷精品视频 | 亚洲中文字幕无码一久久区 | 久久人妻内射无码一区三区 | 亚洲狠狠婷婷综合久久 | 97无码免费人妻超级碰碰夜夜 | 99re在线播放 | 强伦人妻一区二区三区视频18 | 亚洲精品国偷拍自产在线麻豆 | 强伦人妻一区二区三区视频18 | 亚洲成色在线综合网站 | 亚洲国产精品久久人人爱 | 中文字幕无码av波多野吉衣 | 精品久久久中文字幕人妻 | 欧美 亚洲 国产 另类 | 伊人久久大香线蕉亚洲 | 日本一区二区三区免费高清 | 欧美日韩精品 | 亚洲热妇无码av在线播放 | 久久成人a毛片免费观看网站 | 色综合天天综合狠狠爱 | 国产性生交xxxxx无码 | а天堂中文在线官网 | 久久精品国产99精品亚洲 | 熟女俱乐部五十路六十路av | 亚洲中文字幕在线无码一区二区 | 精品国产福利一区二区 | 久久精品99久久香蕉国产色戒 | 精品久久久中文字幕人妻 | 色 综合 欧美 亚洲 国产 | 国产午夜无码视频在线观看 | 久久99久久99精品中文字幕 | 大乳丰满人妻中文字幕日本 | yw尤物av无码国产在线观看 | 鲁大师影院在线观看 | 久久国产精品_国产精品 | 麻豆md0077饥渴少妇 | 久久亚洲精品中文字幕无男同 | 亚洲欧美日韩综合久久久 | 欧美国产日韩亚洲中文 | 欧美激情内射喷水高潮 | 天天综合网天天综合色 | 国产精品二区一区二区aⅴ污介绍 | 天天躁日日躁狠狠躁免费麻豆 | 日本精品人妻无码免费大全 | 国产乱人无码伦av在线a | 亚洲日韩乱码中文无码蜜桃臀网站 | 精品偷拍一区二区三区在线看 | 永久免费观看美女裸体的网站 | 亚洲色无码一区二区三区 | 欧美黑人性暴力猛交喷水 | 狠狠色色综合网站 | 无码吃奶揉捏奶头高潮视频 | 国内综合精品午夜久久资源 | 精品无码国产自产拍在线观看蜜 | 最新版天堂资源中文官网 | 色一情一乱一伦一区二区三欧美 | 久久久久亚洲精品男人的天堂 | 国产成人av免费观看 | 1000部啪啪未满十八勿入下载 | 欧美35页视频在线观看 | 性欧美疯狂xxxxbbbb | 中文字幕日产无线码一区 | 露脸叫床粗话东北少妇 | 久久国内精品自在自线 | 一本精品99久久精品77 | 永久免费观看美女裸体的网站 | 久久综合香蕉国产蜜臀av | 中文精品无码中文字幕无码专区 | 国产精品无码一区二区桃花视频 | 亚洲国产一区二区三区在线观看 | 激情内射亚州一区二区三区爱妻 | 中文字幕无码日韩专区 | 亚洲中文字幕无码中字 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 国产精品美女久久久久av爽李琼 | 天堂亚洲2017在线观看 | 国产超碰人人爽人人做人人添 | 美女黄网站人色视频免费国产 | 18精品久久久无码午夜福利 | 久久国产自偷自偷免费一区调 | 日韩精品a片一区二区三区妖精 | 精品偷自拍另类在线观看 | 日韩亚洲欧美中文高清在线 | 黑人巨大精品欧美一区二区 | 老熟妇乱子伦牲交视频 | 精品熟女少妇av免费观看 | 久久久久久av无码免费看大片 | 丰满少妇熟乱xxxxx视频 | 亚洲一区二区三区播放 | 国产在线一区二区三区四区五区 | 国产精品高潮呻吟av久久4虎 | 粉嫩少妇内射浓精videos | www成人国产高清内射 | 无码人妻久久一区二区三区不卡 | a在线观看免费网站大全 | 国产三级久久久精品麻豆三级 | 久久无码中文字幕免费影院蜜桃 | 国产av人人夜夜澡人人爽麻豆 | 国产美女精品一区二区三区 | 人人爽人人澡人人人妻 | 亚洲一区二区三区偷拍女厕 | 成人无码视频免费播放 | 欧洲熟妇色 欧美 | 国产亚洲精品久久久久久久久动漫 | 骚片av蜜桃精品一区 | 香港三级日本三级妇三级 | 日本欧美一区二区三区乱码 | 欧美人与禽猛交狂配 | a国产一区二区免费入口 | 久久精品国产日本波多野结衣 | 女人被爽到呻吟gif动态图视看 | 少妇厨房愉情理9仑片视频 | 亚洲国产精品久久久天堂 | 亲嘴扒胸摸屁股激烈网站 | 久久综合激激的五月天 | 日韩在线不卡免费视频一区 | 午夜福利试看120秒体验区 | 国产精品久久久久9999小说 | 国产麻豆精品一区二区三区v视界 | 国产一区二区三区日韩精品 | 成人女人看片免费视频放人 | 国产乱人伦av在线无码 | 国产精品高潮呻吟av久久4虎 | 国内揄拍国内精品人妻 | 正在播放东北夫妻内射 | 人人妻人人澡人人爽欧美精品 | 动漫av网站免费观看 | 欧美激情内射喷水高潮 | 免费看少妇作爱视频 | 天堂亚洲2017在线观看 | 国内精品久久久久久中文字幕 | 无码吃奶揉捏奶头高潮视频 | 18禁止看的免费污网站 | 免费观看激色视频网站 | 撕开奶罩揉吮奶头视频 | 国内综合精品午夜久久资源 | 国产色在线 | 国产 | 国产人妻大战黑人第1集 | 久久综合网欧美色妞网 | 国产av剧情md精品麻豆 | 亚洲日本va中文字幕 | 人人妻人人澡人人爽欧美一区 | 午夜性刺激在线视频免费 | 99久久99久久免费精品蜜桃 | 国产成人无码av在线影院 | 一本色道婷婷久久欧美 | 性欧美videos高清精品 | 自拍偷自拍亚洲精品被多人伦好爽 | 日本乱人伦片中文三区 | 亚洲成av人综合在线观看 | 麻豆国产人妻欲求不满 | 无码国内精品人妻少妇 | 欧洲极品少妇 | 久久久久久av无码免费看大片 | 日本一卡2卡3卡四卡精品网站 | 中文字幕乱码中文乱码51精品 | 无码av中文字幕免费放 | 青青青手机频在线观看 | 久久亚洲a片com人成 | 天天拍夜夜添久久精品大 | 国内丰满熟女出轨videos | 国产人妻人伦精品 | 亚洲人交乣女bbw | 丰满诱人的人妻3 | 色综合久久中文娱乐网 | 亚洲狠狠色丁香婷婷综合 | 国产精品自产拍在线观看 | 国产精品无码永久免费888 | 亚洲高清偷拍一区二区三区 | 婷婷六月久久综合丁香 | 国产精品亚洲lv粉色 | 狠狠cao日日穞夜夜穞av | 久久精品99久久香蕉国产色戒 | 成人一在线视频日韩国产 | 少妇人妻大乳在线视频 | 综合人妻久久一区二区精品 | 免费视频欧美无人区码 | 亚洲色欲色欲欲www在线 | 精品乱子伦一区二区三区 | 国产另类ts人妖一区二区 | 亚洲精品久久久久久久久久久 | 国产日产欧产精品精品app | 亚洲成av人影院在线观看 | 一个人看的www免费视频在线观看 | 熟女体下毛毛黑森林 | 人妻插b视频一区二区三区 | 给我免费的视频在线观看 | 色欲久久久天天天综合网精品 | 国产九九九九九九九a片 | 中文无码精品a∨在线观看不卡 | 国产内射爽爽大片视频社区在线 | 伦伦影院午夜理论片 | 国内精品一区二区三区不卡 | 色综合久久中文娱乐网 | 一本久久a久久精品vr综合 | 丰满人妻精品国产99aⅴ | 亚洲日韩乱码中文无码蜜桃臀网站 | 亚洲国产精品久久人人爱 | 日日夜夜撸啊撸 | 正在播放东北夫妻内射 | 久久久国产精品无码免费专区 | 18禁黄网站男男禁片免费观看 | 熟女体下毛毛黑森林 | 午夜丰满少妇性开放视频 | 蜜臀aⅴ国产精品久久久国产老师 | 狠狠色噜噜狠狠狠狠7777米奇 | 好男人www社区 | 久久亚洲日韩精品一区二区三区 | 青青久在线视频免费观看 | 理论片87福利理论电影 | 天堂а√在线地址中文在线 | 精品人妻人人做人人爽 | 欧美大屁股xxxxhd黑色 | 亚洲欧美色中文字幕在线 | 亚洲 欧美 激情 小说 另类 | 中文字幕av伊人av无码av | 精品无码一区二区三区的天堂 | 国产精品亚洲а∨无码播放麻豆 | 精品 日韩 国产 欧美 视频 | 成人综合网亚洲伊人 | 国语自产偷拍精品视频偷 | 国产精品对白交换视频 | 日韩av无码一区二区三区 | 久久99精品国产麻豆蜜芽 | 波多野结衣aⅴ在线 | 亚洲精品一区国产 | 无套内射视频囯产 | 精品久久久久久人妻无码中文字幕 | 国产精品第一国产精品 | 免费看男女做好爽好硬视频 | 无码人妻少妇伦在线电影 | 久久综合九色综合欧美狠狠 | 亚洲乱码国产乱码精品精 | 中文字幕 亚洲精品 第1页 | 精品国产福利一区二区 | 暴力强奷在线播放无码 | 国产偷国产偷精品高清尤物 | 久久久久成人片免费观看蜜芽 | 久久久久久亚洲精品a片成人 | 午夜精品久久久久久久 | 亚洲欧美日韩综合久久久 | 熟女少妇在线视频播放 | 香港三级日本三级妇三级 | 国产精品对白交换视频 | 理论片87福利理论电影 | 亚洲无人区午夜福利码高清完整版 | 人人妻人人澡人人爽欧美精品 | 日本免费一区二区三区最新 | 爆乳一区二区三区无码 | 老熟女重囗味hdxx69 | 国产欧美精品一区二区三区 | 欧美黑人性暴力猛交喷水 | 1000部夫妻午夜免费 | 精品 日韩 国产 欧美 视频 | 亚洲熟妇色xxxxx欧美老妇y | 中文字幕乱码人妻二区三区 | а√天堂www在线天堂小说 | 久久精品国产99久久6动漫 | √天堂资源地址中文在线 | 色狠狠av一区二区三区 | 亚洲国产精品久久久久久 | 中文字幕av日韩精品一区二区 | 日日橹狠狠爱欧美视频 | 国产亚洲欧美在线专区 | 国产成人无码午夜视频在线观看 | 天堂а√在线中文在线 | 夜先锋av资源网站 | 99久久无码一区人妻 | 老熟妇仑乱视频一区二区 | 思思久久99热只有频精品66 | 亚洲爆乳大丰满无码专区 | 国产在线aaa片一区二区99 | 精品国产乱码久久久久乱码 | 欧美三级不卡在线观看 | 我要看www免费看插插视频 | 久久综合香蕉国产蜜臀av | 久久人人爽人人爽人人片ⅴ | 偷窥日本少妇撒尿chinese | 荫蒂被男人添的好舒服爽免费视频 | 人妻少妇精品无码专区二区 | 午夜免费福利小电影 | 男女作爱免费网站 | 亚洲s码欧洲m码国产av | 久久久精品人妻久久影视 | 久久久久人妻一区精品色欧美 | 日韩精品成人一区二区三区 | 在线观看国产一区二区三区 | 六十路熟妇乱子伦 | 内射爽无广熟女亚洲 | 玩弄少妇高潮ⅹxxxyw | 亚洲成av人综合在线观看 | 在线视频网站www色 | 正在播放东北夫妻内射 | а√天堂www在线天堂小说 | 国产激情一区二区三区 | 成人女人看片免费视频放人 | 久久午夜夜伦鲁鲁片无码免费 | 99久久人妻精品免费一区 | 欧美 丝袜 自拍 制服 另类 | 人人妻人人澡人人爽人人精品 | 中文字幕日韩精品一区二区三区 | 国内揄拍国内精品少妇国语 | 精品无码成人片一区二区98 | 色综合久久88色综合天天 | 亚洲色大成网站www国产 | 午夜福利试看120秒体验区 | 四虎影视成人永久免费观看视频 | 乱码av麻豆丝袜熟女系列 | 亚洲日韩中文字幕在线播放 | 丁香啪啪综合成人亚洲 | 国产成人无码a区在线观看视频app | 熟女少妇人妻中文字幕 | 麻豆国产丝袜白领秘书在线观看 | 一本久久a久久精品亚洲 | 久久人人爽人人人人片 | 撕开奶罩揉吮奶头视频 | 亚洲欧洲无卡二区视頻 | 中文字幕 人妻熟女 | 麻豆国产丝袜白领秘书在线观看 | 日日橹狠狠爱欧美视频 | 成人无码影片精品久久久 | 好爽又高潮了毛片免费下载 | 国产人妻精品一区二区三区 | 色婷婷久久一区二区三区麻豆 | 无码人中文字幕 | 欧美35页视频在线观看 | 三上悠亚人妻中文字幕在线 | 国产av无码专区亚洲a∨毛片 | 国产av一区二区三区最新精品 | 精品一区二区不卡无码av | 未满小14洗澡无码视频网站 | 东京无码熟妇人妻av在线网址 | 漂亮人妻洗澡被公强 日日躁 | 任你躁国产自任一区二区三区 | 扒开双腿吃奶呻吟做受视频 | 欧美猛少妇色xxxxx | 精品偷拍一区二区三区在线看 | 亚洲精品午夜国产va久久成人 | 精品无人区无码乱码毛片国产 | 秋霞特色aa大片 | 又湿又紧又大又爽a视频国产 | 天天燥日日燥 | 四虎国产精品免费久久 | 领导边摸边吃奶边做爽在线观看 | 综合激情五月综合激情五月激情1 | 青草青草久热国产精品 | 日本一卡二卡不卡视频查询 | 女人高潮内射99精品 | 人人超人人超碰超国产 | 无遮挡国产高潮视频免费观看 | 日韩人妻无码一区二区三区久久99 | 99久久精品无码一区二区毛片 | 亚洲小说春色综合另类 | 亚洲国精产品一二二线 | 少妇厨房愉情理9仑片视频 | 国产精品久久国产精品99 | 亚洲国产欧美日韩精品一区二区三区 | 久精品国产欧美亚洲色aⅴ大片 | 无码人妻精品一区二区三区不卡 | 爱做久久久久久 | 久久久久久a亚洲欧洲av冫 | 国产人妻久久精品二区三区老狼 | √天堂资源地址中文在线 | 精品国产一区二区三区四区在线看 | 欧美怡红院免费全部视频 | 精品久久久久香蕉网 | 久久人人爽人人爽人人片av高清 | 久久午夜无码鲁丝片午夜精品 | 香港三级日本三级妇三级 | 国产精品美女久久久网av | 亚洲熟妇色xxxxx欧美老妇 | 伊人久久婷婷五月综合97色 | 国产av久久久久精东av | 午夜福利不卡在线视频 | 精品人妻人人做人人爽夜夜爽 | 一本色道久久综合亚洲精品不卡 | 少妇激情av一区二区 | 色爱情人网站 | 色婷婷久久一区二区三区麻豆 | 一本久道高清无码视频 | 搡女人真爽免费视频大全 | 人妻无码αv中文字幕久久琪琪布 | 国产情侣作爱视频免费观看 | 国产精品久久久久久无码 | 中文字幕日韩精品一区二区三区 | 久久人人爽人人爽人人片av高清 | 免费观看的无遮挡av | 人妻无码αv中文字幕久久琪琪布 | 欧美成人免费全部网站 | 久久国产精品萌白酱免费 | 国产av久久久久精东av | 亚洲人成网站免费播放 | 国产成人久久精品流白浆 | 少妇性l交大片欧洲热妇乱xxx | 久久国产劲爆∧v内射 | 午夜无码区在线观看 | 一本久久伊人热热精品中文字幕 | 久久亚洲中文字幕精品一区 | 麻豆国产人妻欲求不满 | 日韩av无码中文无码电影 | 激情内射日本一区二区三区 | 狠狠色噜噜狠狠狠狠7777米奇 | 扒开双腿疯狂进出爽爽爽视频 | 国产精品人妻一区二区三区四 | 久久国产36精品色熟妇 | 男人扒开女人内裤强吻桶进去 | 国内综合精品午夜久久资源 | 国精产品一品二品国精品69xx | 国产精品高潮呻吟av久久 | 老熟妇乱子伦牲交视频 | 日本乱偷人妻中文字幕 | 亚洲一区二区三区在线观看网站 | 国产在线精品一区二区高清不卡 | 人妻少妇精品久久 | 夜先锋av资源网站 | 奇米影视7777久久精品人人爽 | 国产舌乚八伦偷品w中 | 国产亚洲精品精品国产亚洲综合 | 欧美乱妇无乱码大黄a片 | 中文字幕无码av激情不卡 | 中文字幕无码免费久久9一区9 | 东京热无码av男人的天堂 | 性欧美牲交在线视频 | 中文字幕无线码免费人妻 | 蜜臀av在线播放 久久综合激激的五月天 | 国产亚洲精品精品国产亚洲综合 | 无码福利日韩神码福利片 | 精品成人av一区二区三区 | аⅴ资源天堂资源库在线 | 无码人妻久久一区二区三区不卡 | 高潮毛片无遮挡高清免费视频 | 精品一区二区三区无码免费视频 | 无码人妻丰满熟妇区毛片18 | 少女韩国电视剧在线观看完整 | 免费播放一区二区三区 | 国产在线一区二区三区四区五区 | 人妻夜夜爽天天爽三区 | 亚洲国产综合无码一区 | 久久亚洲中文字幕无码 | 少妇高潮喷潮久久久影院 | 欧美国产日韩久久mv | 人人妻人人藻人人爽欧美一区 | 久久精品女人天堂av免费观看 | 99久久99久久免费精品蜜桃 | 人人爽人人澡人人高潮 | 少妇性俱乐部纵欲狂欢电影 | 97se亚洲精品一区 | 又大又黄又粗又爽的免费视频 | aⅴ在线视频男人的天堂 | 亚洲乱码国产乱码精品精 | 色综合视频一区二区三区 | 国产精品嫩草久久久久 | 国产免费久久精品国产传媒 | 国产97人人超碰caoprom | √天堂中文官网8在线 | 久久99精品国产麻豆蜜芽 | 中文字幕日韩精品一区二区三区 | 亚洲成a人一区二区三区 | 熟女体下毛毛黑森林 | 熟妇人妻无码xxx视频 | 2020久久香蕉国产线看观看 | 国产三级精品三级男人的天堂 | 精品成人av一区二区三区 | 中文字幕av无码一区二区三区电影 | 中文字幕无码免费久久99 | 377p欧洲日本亚洲大胆 | 国产乱码精品一品二品 | 中文无码伦av中文字幕 | 99久久久无码国产aaa精品 | 久久综合九色综合欧美狠狠 | 无码精品人妻一区二区三区av | 国产精品人人妻人人爽 | 亚洲欧美日韩国产精品一区二区 | 搡女人真爽免费视频大全 | 国产xxx69麻豆国语对白 | 国产舌乚八伦偷品w中 | 久久精品人妻少妇一区二区三区 | 88国产精品欧美一区二区三区 | 亚洲国产高清在线观看视频 | 好屌草这里只有精品 | 亚洲gv猛男gv无码男同 | 亚洲日本va中文字幕 | 精品人人妻人人澡人人爽人人 | 国产亚洲精品精品国产亚洲综合 | 日本护士xxxxhd少妇 | 强伦人妻一区二区三区视频18 | 人人澡人人透人人爽 | 欧美丰满熟妇xxxx性ppx人交 | 国产乱人伦av在线无码 | 亚洲成av人综合在线观看 | 欧美喷潮久久久xxxxx | 色欲综合久久中文字幕网 | 久久亚洲国产成人精品性色 | 伊人久久大香线蕉午夜 | 日韩成人一区二区三区在线观看 | 男人的天堂av网站 | 国产一区二区三区影院 | 好爽又高潮了毛片免费下载 | 国产三级久久久精品麻豆三级 | 美女黄网站人色视频免费国产 | 欧美日韩一区二区三区自拍 | 国产精品多人p群无码 | 日韩精品无码免费一区二区三区 | 久久久久成人片免费观看蜜芽 | 亚洲综合精品香蕉久久网 | 国产亚av手机在线观看 | 精品一区二区三区波多野结衣 | 久久成人a毛片免费观看网站 | 国产性生大片免费观看性 | 无码人妻精品一区二区三区不卡 | 久久久久久久人妻无码中文字幕爆 | 激情爆乳一区二区三区 | 国产真人无遮挡作爱免费视频 | 色婷婷av一区二区三区之红樱桃 | 国语精品一区二区三区 | 久久亚洲日韩精品一区二区三区 | 国产精品理论片在线观看 | 午夜精品一区二区三区在线观看 | 国产亚洲精品久久久久久 | 精品国产青草久久久久福利 | 丰满少妇人妻久久久久久 | 亚洲人成无码网www | 丰满诱人的人妻3 | 久久99精品国产麻豆 | 亚洲一区二区三区无码久久 | 国产乱子伦视频在线播放 | 性生交大片免费看l | 精品一二三区久久aaa片 | 亚洲熟妇色xxxxx欧美老妇 | 久久99精品久久久久久 | 捆绑白丝粉色jk震动捧喷白浆 | 天天爽夜夜爽夜夜爽 | 少妇性荡欲午夜性开放视频剧场 | 欧洲欧美人成视频在线 | 国精产品一品二品国精品69xx | 亚洲乱码日产精品bd | 日产精品高潮呻吟av久久 | 免费播放一区二区三区 | 国产又爽又猛又粗的视频a片 | 中国大陆精品视频xxxx | 亚洲熟妇色xxxxx欧美老妇 | 中文毛片无遮挡高清免费 | 亚洲一区二区三区播放 | 免费看男女做好爽好硬视频 | 久久久精品人妻久久影视 | 图片区 小说区 区 亚洲五月 | 国产亚洲视频中文字幕97精品 | 精品无码av一区二区三区 | 无码精品国产va在线观看dvd | 国产精品久久国产精品99 | 人人妻人人澡人人爽欧美一区九九 | 国产人妻人伦精品1国产丝袜 | 在线播放免费人成毛片乱码 | 在线精品亚洲一区二区 | 亚洲日韩一区二区 | 日韩 欧美 动漫 国产 制服 | 久久综合九色综合欧美狠狠 | 国产精品香蕉在线观看 | 国产精品对白交换视频 | 大色综合色综合网站 | 国内精品一区二区三区不卡 | 国产特级毛片aaaaaaa高清 | 国产欧美亚洲精品a | 亚洲熟女一区二区三区 | 高中生自慰www网站 | 日韩精品无码一本二本三本色 | 狂野欧美性猛交免费视频 | 精品无人区无码乱码毛片国产 | 国产激情综合五月久久 | 中文字幕人妻无码一夲道 | 丰满少妇弄高潮了www | 午夜时刻免费入口 | 成熟女人特级毛片www免费 | 成人精品视频一区二区 | 久久久精品456亚洲影院 | 成 人影片 免费观看 | 国产片av国语在线观看 | 亚洲精品国产第一综合99久久 | 国产激情艳情在线看视频 | 亚洲综合在线一区二区三区 | 老太婆性杂交欧美肥老太 | 国产超级va在线观看视频 | 国产欧美精品一区二区三区 | 欧美老妇交乱视频在线观看 | 人妻少妇精品无码专区二区 | 真人与拘做受免费视频一 | 最新国产麻豆aⅴ精品无码 | 成人无码影片精品久久久 | 国产精品美女久久久久av爽李琼 | 亚洲成在人网站无码天堂 | 国产精品久久久午夜夜伦鲁鲁 | 久久精品无码一区二区三区 | 日韩少妇内射免费播放 | 免费国产黄网站在线观看 | 国产精品手机免费 | 亚洲精品鲁一鲁一区二区三区 | 成人免费视频在线观看 | 国产精品亚洲五月天高清 | 免费观看黄网站 | 久久久久久久久蜜桃 | 亚洲男女内射在线播放 | 亚洲人成人无码网www国产 | 亚洲乱码国产乱码精品精 | 久久综合香蕉国产蜜臀av | 欧美xxxx黑人又粗又长 | 99国产欧美久久久精品 | 亚洲熟妇色xxxxx欧美老妇 | 久久久中文字幕日本无吗 | 中文字幕无码av波多野吉衣 | 丰腴饱满的极品熟妇 | 日日麻批免费40分钟无码 | 久久国产精品偷任你爽任你 | 国产精品久久久久影院嫩草 | 国产av久久久久精东av | 欧美性黑人极品hd | 日日噜噜噜噜夜夜爽亚洲精品 | 国产精品18久久久久久麻辣 | 欧洲极品少妇 | 久激情内射婷内射蜜桃人妖 | 欧美性猛交内射兽交老熟妇 | 中文精品久久久久人妻不卡 | 成人亚洲精品久久久久 | 中文字幕精品av一区二区五区 | 色噜噜亚洲男人的天堂 | 性色欲网站人妻丰满中文久久不卡 | 乱码午夜-极国产极内射 | 鲁大师影院在线观看 | 麻豆精品国产精华精华液好用吗 | 红桃av一区二区三区在线无码av | 一个人免费观看的www视频 | 中文精品久久久久人妻不卡 | 性生交大片免费看女人按摩摩 | 日日麻批免费40分钟无码 | 日日夜夜撸啊撸 | 最近免费中文字幕中文高清百度 | 99久久久无码国产精品免费 | 亚洲精品成a人在线观看 | 国产免费观看黄av片 | 精品国产一区av天美传媒 | 亚洲精品一区二区三区婷婷月 | 精品国产一区二区三区av 性色 | 18无码粉嫩小泬无套在线观看 | 樱花草在线播放免费中文 | 欧美zoozzooz性欧美 | 老头边吃奶边弄进去呻吟 | 无码福利日韩神码福利片 | 亚洲娇小与黑人巨大交 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 日本精品久久久久中文字幕 | 欧美性生交活xxxxxdddd | 天干天干啦夜天干天2017 | 国产在线aaa片一区二区99 | 精品少妇爆乳无码av无码专区 | 激情内射日本一区二区三区 | 成人影院yy111111在线观看 | 亚洲中文字幕在线无码一区二区 | 亚洲国产欧美日韩精品一区二区三区 | 少妇无套内谢久久久久 | av在线亚洲欧洲日产一区二区 | 中文字幕乱码人妻无码久久 | 日日天干夜夜狠狠爱 | 秋霞特色aa大片 | 国产精品高潮呻吟av久久4虎 | 婷婷五月综合激情中文字幕 | 国色天香社区在线视频 | 丝袜 中出 制服 人妻 美腿 | 少妇太爽了在线观看 | 黑人巨大精品欧美黑寡妇 | 初尝人妻少妇中文字幕 | 成人精品一区二区三区中文字幕 | 久久精品99久久香蕉国产色戒 | 亚洲成a人片在线观看日本 | 亚洲 a v无 码免 费 成 人 a v | 亚洲色无码一区二区三区 | av无码久久久久不卡免费网站 | 又粗又大又硬毛片免费看 | 亚洲精品国产精品乱码不卡 | 日本www一道久久久免费榴莲 | 国内揄拍国内精品人妻 | 波多野结衣高清一区二区三区 | 欧美人妻一区二区三区 | 性欧美牲交xxxxx视频 | 中文字幕精品av一区二区五区 | 波多野42部无码喷潮在线 | 美女扒开屁股让男人桶 | 成 人 网 站国产免费观看 | 久久久中文字幕日本无吗 | 国产在线一区二区三区四区五区 | 亚洲 高清 成人 动漫 | 国产午夜亚洲精品不卡 | 粉嫩少妇内射浓精videos | 日日碰狠狠躁久久躁蜜桃 | 亚洲熟妇色xxxxx欧美老妇 | 国产成人无码午夜视频在线观看 | 精品偷自拍另类在线观看 | 成人一区二区免费视频 | 亚洲综合在线一区二区三区 | 日日摸夜夜摸狠狠摸婷婷 | 国产人妻人伦精品1国产丝袜 | 对白脏话肉麻粗话av | 女高中生第一次破苞av | 亚洲区欧美区综合区自拍区 | 无码一区二区三区在线观看 | 国产精品久久久久久亚洲毛片 | 无码一区二区三区在线观看 | 国产欧美精品一区二区三区 | 日日摸夜夜摸狠狠摸婷婷 | 无码播放一区二区三区 | 在线观看国产一区二区三区 | 国产激情精品一区二区三区 | 国产无遮挡吃胸膜奶免费看 | a国产一区二区免费入口 | аⅴ资源天堂资源库在线 | 少妇激情av一区二区 | 国产精品无码永久免费888 | 久久综合香蕉国产蜜臀av | 丰满少妇女裸体bbw | 99久久99久久免费精品蜜桃 | 久久99精品久久久久婷婷 | 成年美女黄网站色大免费全看 | 国产av久久久久精东av | 亚洲精品www久久久 | 国产又粗又硬又大爽黄老大爷视 | 久久成人a毛片免费观看网站 | 正在播放老肥熟妇露脸 | 久久久久久久人妻无码中文字幕爆 | aa片在线观看视频在线播放 | 国产午夜精品一区二区三区嫩草 | 国产精华av午夜在线观看 | 樱花草在线播放免费中文 | 国产精品美女久久久久av爽李琼 | 真人与拘做受免费视频 | 久久精品丝袜高跟鞋 | 99久久人妻精品免费一区 | 亚洲日韩精品欧美一区二区 | 伊人久久大香线蕉av一区二区 | 亚洲乱码国产乱码精品精 | 成人片黄网站色大片免费观看 | 国产片av国语在线观看 | 又湿又紧又大又爽a视频国产 | 无码播放一区二区三区 | 欧美精品无码一区二区三区 | 三级4级全黄60分钟 | 麻花豆传媒剧国产免费mv在线 | 熟妇人妻激情偷爽文 | 最新版天堂资源中文官网 | 亚洲一区二区观看播放 | 一本大道伊人av久久综合 | 国产精品无码永久免费888 | 国产精品美女久久久网av | 久久精品视频在线看15 | 久久99精品久久久久久 | 人人妻人人澡人人爽欧美精品 | 俄罗斯老熟妇色xxxx | 女人和拘做爰正片视频 | 大肉大捧一进一出好爽视频 | 奇米影视7777久久精品 | 精品午夜福利在线观看 | 国内精品人妻无码久久久影院蜜桃 | 亚洲熟女一区二区三区 | 无码av岛国片在线播放 | 97久久精品无码一区二区 | 成人免费无码大片a毛片 | 国内综合精品午夜久久资源 | 日韩无码专区 | 成 人 网 站国产免费观看 | 免费观看激色视频网站 | 午夜成人1000部免费视频 | 国内揄拍国内精品人妻 | 精品国产成人一区二区三区 | 免费无码的av片在线观看 | 欧美国产亚洲日韩在线二区 | 内射白嫩少妇超碰 | 国产午夜手机精彩视频 | 亚洲人成网站色7799 | 西西人体www44rt大胆高清 | 丰满妇女强制高潮18xxxx | 无套内射视频囯产 | 扒开双腿疯狂进出爽爽爽视频 | 激情国产av做激情国产爱 | 人妻插b视频一区二区三区 | 亚洲日韩乱码中文无码蜜桃臀网站 | 亚洲欧美中文字幕5发布 | 激情爆乳一区二区三区 | 妺妺窝人体色www在线小说 | 一本色道婷婷久久欧美 | 精品无码成人片一区二区98 | 成人免费视频视频在线观看 免费 | 日本www一道久久久免费榴莲 | 国产免费无码一区二区视频 | 久久综合网欧美色妞网 | 中文字幕av日韩精品一区二区 | 无码av免费一区二区三区试看 | 亚洲aⅴ无码成人网站国产app | 狠狠亚洲超碰狼人久久 | 久久午夜夜伦鲁鲁片无码免费 | 久久视频在线观看精品 | 国产av人人夜夜澡人人爽麻豆 | 久久久久亚洲精品男人的天堂 | 无码人妻久久一区二区三区不卡 | 色婷婷综合激情综在线播放 | 午夜无码区在线观看 | 女高中生第一次破苞av | 国产亚洲日韩欧美另类第八页 | 日本熟妇乱子伦xxxx | 成人aaa片一区国产精品 | 国产精品亚洲а∨无码播放麻豆 | 最新国产乱人伦偷精品免费网站 | 日日鲁鲁鲁夜夜爽爽狠狠 | 成人一区二区免费视频 | 欧美怡红院免费全部视频 | 日本精品人妻无码免费大全 | 国产成人一区二区三区在线观看 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 鲁鲁鲁爽爽爽在线视频观看 | 中文字幕无码免费久久99 | 青青草原综合久久大伊人精品 | 免费无码的av片在线观看 | 久在线观看福利视频 | 精品午夜福利在线观看 | 欧美人与善在线com | 在线а√天堂中文官网 | 无码人妻久久一区二区三区不卡 | 成人无码视频在线观看网站 | 377p欧洲日本亚洲大胆 | 成人精品视频一区二区三区尤物 | 无码任你躁久久久久久久 | 99久久精品午夜一区二区 | 高中生自慰www网站 | 真人与拘做受免费视频 | 亚洲s色大片在线观看 | 国精品人妻无码一区二区三区蜜柚 | 色婷婷久久一区二区三区麻豆 | 377p欧洲日本亚洲大胆 | 2019午夜福利不卡片在线 | 精品aⅴ一区二区三区 | 西西人体www44rt大胆高清 | 99久久精品午夜一区二区 | 亚洲国产欧美国产综合一区 | 熟妇人妻无乱码中文字幕 | 中文字幕无码日韩专区 | 久久综合久久自在自线精品自 | 亚洲欧美色中文字幕在线 | 国产亚洲欧美日韩亚洲中文色 | 丰满人妻一区二区三区免费视频 | aⅴ在线视频男人的天堂 | 亚洲精品国产精品乱码不卡 | 国产亚洲人成在线播放 | 香港三级日本三级妇三级 | 亚洲中文字幕av在天堂 | 蜜桃无码一区二区三区 | 亚洲 另类 在线 欧美 制服 | 国产乱人伦av在线无码 | 亚洲色偷偷偷综合网 | 妺妺窝人体色www婷婷 | 中文字幕av伊人av无码av | 狂野欧美激情性xxxx | av人摸人人人澡人人超碰下载 | 牲欲强的熟妇农村老妇女视频 | 中文字幕精品av一区二区五区 | a在线观看免费网站大全 | 国内丰满熟女出轨videos | 亚洲中文字幕久久无码 | 最近免费中文字幕中文高清百度 | 精品一二三区久久aaa片 | 一本久久a久久精品vr综合 | 欧美日韩一区二区三区自拍 | 国产亚洲tv在线观看 | 奇米影视7777久久精品 | 动漫av一区二区在线观看 | 一本久久a久久精品vr综合 | 熟妇人妻无乱码中文字幕 | 久久精品国产一区二区三区肥胖 | av无码不卡在线观看免费 | 国产亚av手机在线观看 | 麻豆果冻传媒2021精品传媒一区下载 | 澳门永久av免费网站 | 狠狠色噜噜狠狠狠狠7777米奇 | 婷婷五月综合激情中文字幕 | 成人三级无码视频在线观看 | 乱人伦人妻中文字幕无码久久网 | 久久99精品久久久久久动态图 | 无遮挡国产高潮视频免费观看 | 亚洲欧美中文字幕5发布 | 亚洲理论电影在线观看 | 日韩av无码一区二区三区不卡 | 小泽玛莉亚一区二区视频在线 | 免费无码肉片在线观看 | 中文字幕乱妇无码av在线 | 水蜜桃av无码 | 青草青草久热国产精品 | 永久免费观看美女裸体的网站 | 宝宝好涨水快流出来免费视频 | 久久精品一区二区三区四区 | 色婷婷久久一区二区三区麻豆 | 一本色道婷婷久久欧美 | 夜精品a片一区二区三区无码白浆 | 久久99热只有频精品8 | 最新国产乱人伦偷精品免费网站 | 波多野结衣av一区二区全免费观看 | 少妇无码吹潮 | 大肉大捧一进一出视频出来呀 | 人妻少妇精品无码专区动漫 | а天堂中文在线官网 | 超碰97人人射妻 | 亚洲精品一区三区三区在线观看 | 巨爆乳无码视频在线观看 | 亚洲自偷自偷在线制服 | 无码播放一区二区三区 | 亚洲精品久久久久久一区二区 | 久久99久久99精品中文字幕 | 亚洲精品无码国产 | 九九热爱视频精品 | 少妇邻居内射在线 | 亚洲欧洲日本无在线码 | 丝袜人妻一区二区三区 | 漂亮人妻洗澡被公强 日日躁 | 青青青爽视频在线观看 | 在线播放免费人成毛片乱码 | 日本一本二本三区免费 | 国语自产偷拍精品视频偷 | 美女极度色诱视频国产 | 国产猛烈高潮尖叫视频免费 | 玩弄少妇高潮ⅹxxxyw | 免费乱码人妻系列无码专区 | 婷婷色婷婷开心五月四房播播 | 巨爆乳无码视频在线观看 | 我要看www免费看插插视频 | 成人欧美一区二区三区黑人 | 国内老熟妇对白xxxxhd | 国产精品无码一区二区三区不卡 | 国产精品久久久久久亚洲毛片 | 国产精品久久久 | 一本精品99久久精品77 | 精品厕所偷拍各类美女tp嘘嘘 | 东京热无码av男人的天堂 | 夜夜夜高潮夜夜爽夜夜爰爰 | 国产精品无码久久av | 性生交大片免费看l | 欧美老妇交乱视频在线观看 | 俄罗斯老熟妇色xxxx | 成人免费无码大片a毛片 | 黑人粗大猛烈进出高潮视频 | 久久亚洲精品中文字幕无男同 | 55夜色66夜色国产精品视频 | 亚洲成在人网站无码天堂 | 日韩精品无码免费一区二区三区 | 久久综合给合久久狠狠狠97色 | 精品厕所偷拍各类美女tp嘘嘘 | 无码国产乱人伦偷精品视频 | 成人无码视频在线观看网站 | 丝袜人妻一区二区三区 | 日本精品人妻无码免费大全 | 亚洲天堂2017无码 | 精品成人av一区二区三区 | 免费观看激色视频网站 | 国产成人精品视频ⅴa片软件竹菊 | 一区二区三区乱码在线 | 欧洲 | 国产成人一区二区三区别 | 成人免费无码大片a毛片 | 亚洲综合在线一区二区三区 | 久久综合给久久狠狠97色 | 国产精品久久国产三级国 | 天天燥日日燥 | 国产疯狂伦交大片 | 精品 日韩 国产 欧美 视频 | 色老头在线一区二区三区 | 亚洲日韩av一区二区三区四区 | 亚洲精品美女久久久久久久 | 欧美成人高清在线播放 | 久久99久久99精品中文字幕 | 国产明星裸体无码xxxx视频 | 欧美性生交活xxxxxdddd | 国产av久久久久精东av | 国产97色在线 | 免 | 久久天天躁狠狠躁夜夜免费观看 | 亚洲乱码国产乱码精品精 | 中文字幕乱码人妻二区三区 | 老太婆性杂交欧美肥老太 | 少妇被粗大的猛进出69影院 | 人妻互换免费中文字幕 | 国产成人精品必看 | 免费观看的无遮挡av | 人妻少妇被猛烈进入中文字幕 | 国产黄在线观看免费观看不卡 | 国内丰满熟女出轨videos | 特黄特色大片免费播放器图片 | 蜜桃av抽搐高潮一区二区 | 色一情一乱一伦一视频免费看 | 人人澡人人妻人人爽人人蜜桃 | 99久久亚洲精品无码毛片 | 中文无码精品a∨在线观看不卡 | 4hu四虎永久在线观看 | 中文字幕乱码人妻无码久久 | 中文字幕+乱码+中文字幕一区 | 久久99精品国产.久久久久 | 99久久久无码国产aaa精品 | 奇米影视7777久久精品人人爽 | 极品尤物被啪到呻吟喷水 | 最近的中文字幕在线看视频 | 国产精品久久久久9999小说 | 无码av免费一区二区三区试看 | 国产艳妇av在线观看果冻传媒 | 国产成人无码午夜视频在线观看 | 日韩 欧美 动漫 国产 制服 | 又紧又大又爽精品一区二区 | 欧美成人高清在线播放 | 无码人妻久久一区二区三区不卡 | 在线观看国产午夜福利片 | 久久久久成人片免费观看蜜芽 | 国产欧美精品一区二区三区 | 99久久无码一区人妻 | 国产av剧情md精品麻豆 | 内射白嫩少妇超碰 | 无码午夜成人1000部免费视频 | 欧美午夜特黄aaaaaa片 | 亚欧洲精品在线视频免费观看 | 偷窥日本少妇撒尿chinese | 亚洲日本一区二区三区在线 | 18无码粉嫩小泬无套在线观看 | 欧美乱妇无乱码大黄a片 | 国产人妖乱国产精品人妖 | 熟女俱乐部五十路六十路av | 荫蒂被男人添的好舒服爽免费视频 | 久久无码专区国产精品s | 青青草原综合久久大伊人精品 | 久久久久人妻一区精品色欧美 | 男女下面进入的视频免费午夜 | 国语自产偷拍精品视频偷 | 国产精品亚洲一区二区三区喷水 | 无码任你躁久久久久久久 | 成人免费视频视频在线观看 免费 | 免费看少妇作爱视频 | 国产精品人人爽人人做我的可爱 | 又大又硬又黄的免费视频 | 精品人人妻人人澡人人爽人人 | 国产午夜视频在线观看 | 国产亚洲日韩欧美另类第八页 | 黄网在线观看免费网站 | 中国大陆精品视频xxxx | 综合激情五月综合激情五月激情1 | 亚洲欧美日韩综合久久久 | 国产午夜无码精品免费看 | 色偷偷人人澡人人爽人人模 | 久久99久久99精品中文字幕 | 国产精品亚洲五月天高清 | 国产激情无码一区二区 | 97无码免费人妻超级碰碰夜夜 | 2019nv天堂香蕉在线观看 | 欧美老熟妇乱xxxxx | 无码精品国产va在线观看dvd | 少妇被黑人到高潮喷出白浆 | 亚洲欧美日韩成人高清在线一区 | 无码人妻出轨黑人中文字幕 | 成人无码视频在线观看网站 | 熟妇人妻无码xxx视频 | 97夜夜澡人人爽人人喊中国片 | 国产suv精品一区二区五 | 国产精品无码mv在线观看 | 国产成人无码av在线影院 | 97精品人妻一区二区三区香蕉 | 日日摸天天摸爽爽狠狠97 | 日本精品人妻无码77777 天堂一区人妻无码 | 免费视频欧美无人区码 | 天堂а√在线中文在线 | 亚洲精品国产a久久久久久 | 樱花草在线播放免费中文 | 99riav国产精品视频 | 人妻人人添人妻人人爱 | 欧美丰满老熟妇xxxxx性 | 精品欧洲av无码一区二区三区 | 国产精品美女久久久久av爽李琼 | 久久久中文字幕日本无吗 | 51国偷自产一区二区三区 | 色综合天天综合狠狠爱 | 亚洲小说图区综合在线 | 久久精品中文字幕一区 | 无码福利日韩神码福利片 | 婷婷五月综合缴情在线视频 | aⅴ亚洲 日韩 色 图网站 播放 | a国产一区二区免费入口 | 成人无码影片精品久久久 | 草草网站影院白丝内射 | 久久精品99久久香蕉国产色戒 | 麻豆精产国品 | 日本熟妇大屁股人妻 | 免费无码肉片在线观看 | 无码av免费一区二区三区试看 | 成年女人永久免费看片 | 蜜桃av抽搐高潮一区二区 | 国产绳艺sm调教室论坛 | 双乳奶水饱满少妇呻吟 | 天堂亚洲免费视频 | 好男人社区资源 | 少妇无套内谢久久久久 | 亚洲综合另类小说色区 | 精品午夜福利在线观看 | 久久精品人妻少妇一区二区三区 | 国产精品国产三级国产专播 | 精品人人妻人人澡人人爽人人 | 久久99精品国产麻豆蜜芽 | 色婷婷综合中文久久一本 | 人人妻人人澡人人爽欧美一区 | 精品成在人线av无码免费看 | 精品国偷自产在线 | 成人性做爰aaa片免费看 | 亚洲gv猛男gv无码男同 | 亚洲中文字幕va福利 | 日韩成人一区二区三区在线观看 | 天天拍夜夜添久久精品 | 全球成人中文在线 | 少妇久久久久久人妻无码 | 成人试看120秒体验区 | 欧美日韩一区二区三区自拍 | 国产午夜亚洲精品不卡下载 | 兔费看少妇性l交大片免费 | 欧美真人作爱免费视频 | 国产精品资源一区二区 | 在线а√天堂中文官网 | av人摸人人人澡人人超碰下载 | 国产明星裸体无码xxxx视频 | 熟妇人妻无乱码中文字幕 | 成人免费视频在线观看 | 欧美三级a做爰在线观看 | www一区二区www免费 | 精品国产乱码久久久久乱码 | 国产sm调教视频在线观看 | 亚洲gv猛男gv无码男同 | 自拍偷自拍亚洲精品10p | 日韩人妻系列无码专区 | 精品水蜜桃久久久久久久 | 亚洲人成网站在线播放942 | 久久久久se色偷偷亚洲精品av | 日本精品久久久久中文字幕 | 妺妺窝人体色www在线小说 | 人人妻人人澡人人爽人人精品 | 欧美怡红院免费全部视频 | 亚洲天堂2017无码 | 少妇厨房愉情理9仑片视频 | 曰本女人与公拘交酡免费视频 | 99久久久无码国产精品免费 | 久久久精品456亚洲影院 | 亚洲毛片av日韩av无码 | 成人亚洲精品久久久久软件 | 亚洲一区二区三区国产精华液 | 性欧美疯狂xxxxbbbb | 久久综合狠狠综合久久综合88 | 狂野欧美性猛交免费视频 | 又大又紧又粉嫩18p少妇 | 亚洲色大成网站www | 超碰97人人做人人爱少妇 | 亚洲一区二区三区国产精华液 | 人妻少妇被猛烈进入中文字幕 | 日日鲁鲁鲁夜夜爽爽狠狠 | 日韩精品久久久肉伦网站 | 国产午夜亚洲精品不卡下载 | 疯狂三人交性欧美 | 熟女少妇人妻中文字幕 | 无码人妻久久一区二区三区不卡 | 国产婷婷色一区二区三区在线 | 夜夜夜高潮夜夜爽夜夜爰爰 | 欧美性色19p | 国产人妖乱国产精品人妖 | 少妇性俱乐部纵欲狂欢电影 | 在教室伦流澡到高潮hnp视频 | 午夜理论片yy44880影院 | 清纯唯美经典一区二区 | 99久久久无码国产精品免费 | 亚洲精品一区二区三区在线 | 曰韩少妇内射免费播放 | 成在人线av无码免观看麻豆 | 国产口爆吞精在线视频 | 大屁股大乳丰满人妻 | 丰腴饱满的极品熟妇 | 日本一卡2卡3卡四卡精品网站 | 久久久av男人的天堂 | 曰韩无码二三区中文字幕 | 98国产精品综合一区二区三区 | 天天摸天天碰天天添 | 亚洲综合精品香蕉久久网 | 午夜福利一区二区三区在线观看 | 色五月丁香五月综合五月 | 永久免费精品精品永久-夜色 | aa片在线观看视频在线播放 | 精品久久8x国产免费观看 | 久久亚洲a片com人成 | 成人免费无码大片a毛片 | 人人爽人人澡人人人妻 | 青青草原综合久久大伊人精品 | 国产性生大片免费观看性 | 扒开双腿疯狂进出爽爽爽视频 | 国产在线aaa片一区二区99 | 成年女人永久免费看片 | 一个人看的视频www在线 | 国产av人人夜夜澡人人爽麻豆 | 久久久久久久久888 | 亚洲精品无码国产 | 精品无码国产一区二区三区av | 国色天香社区在线视频 | 丁香花在线影院观看在线播放 | 国产精品久久精品三级 | 55夜色66夜色国产精品视频 | 国产精品永久免费视频 | 无码精品人妻一区二区三区av | 亚洲一区二区三区偷拍女厕 | 少妇的肉体aa片免费 | 亚洲色大成网站www | 久久久久免费精品国产 | 国产av人人夜夜澡人人爽麻豆 | 亚洲 a v无 码免 费 成 人 a v | 亚洲熟妇自偷自拍另类 | 超碰97人人做人人爱少妇 | 国产明星裸体无码xxxx视频 | 亚洲熟悉妇女xxx妇女av | 高潮毛片无遮挡高清免费视频 | 精品人妻人人做人人爽夜夜爽 | 国产日产欧产精品精品app | 国内精品九九久久久精品 | 国产9 9在线 | 中文 | 动漫av网站免费观看 | 欧美成人高清在线播放 | 亚洲人亚洲人成电影网站色 | 乱码午夜-极国产极内射 | 欧美亚洲日韩国产人成在线播放 | 久9re热视频这里只有精品 | 国产美女极度色诱视频www | 极品嫩模高潮叫床 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产精华av午夜在线观看 | 日本护士xxxxhd少妇 | 无码午夜成人1000部免费视频 | 亚洲爆乳精品无码一区二区三区 | 国产成人综合在线女婷五月99播放 | 国内少妇偷人精品视频免费 | 大地资源网第二页免费观看 | 熟妇人妻无码xxx视频 | 国产精品亚洲а∨无码播放麻豆 | 国产精品办公室沙发 | 国产高清av在线播放 | 亚洲午夜无码久久 | 久久99精品国产麻豆 | 亚洲精品一区二区三区婷婷月 | 欧美亚洲日韩国产人成在线播放 | 天堂无码人妻精品一区二区三区 | 亚洲高清偷拍一区二区三区 | 国精品人妻无码一区二区三区蜜柚 | 久久无码专区国产精品s | 国产成人精品三级麻豆 | 国内综合精品午夜久久资源 | 给我免费的视频在线观看 | 久久久久国色av免费观看性色 | 欧美放荡的少妇 | 欧美熟妇另类久久久久久多毛 | 亚洲色偷偷男人的天堂 | 免费网站看v片在线18禁无码 | 久久久精品成人免费观看 | 国产亚洲人成在线播放 | 亚洲码国产精品高潮在线 | 在线观看免费人成视频 | 欧美 丝袜 自拍 制服 另类 | 成人精品一区二区三区中文字幕 | 亚洲 高清 成人 动漫 | 婷婷六月久久综合丁香 | 一本久道久久综合狠狠爱 | 乱中年女人伦av三区 | 少妇的肉体aa片免费 | 国产成人亚洲综合无码 | 久久久久亚洲精品男人的天堂 | 国产精品理论片在线观看 | 亚洲成av人在线观看网址 | 撕开奶罩揉吮奶头视频 | 欧美zoozzooz性欧美 | 女人被男人爽到呻吟的视频 | 久久无码人妻影院 | 亚洲精品一区二区三区四区五区 | 少妇性俱乐部纵欲狂欢电影 | 欧美老妇交乱视频在线观看 | 日本肉体xxxx裸交 | 国产口爆吞精在线视频 | 又大又黄又粗又爽的免费视频 | 国产性生大片免费观看性 | 亚洲爆乳无码专区 | 亚无码乱人伦一区二区 | 午夜成人1000部免费视频 | 中文字幕中文有码在线 | 国产片av国语在线观看 | 老熟女乱子伦 | 男人的天堂2018无码 | 国产精品亚洲一区二区三区喷水 | 樱花草在线播放免费中文 | 亚洲色在线无码国产精品不卡 | 性生交大片免费看l | 中文字幕人成乱码熟女app | 天堂在线观看www | 伊人色综合久久天天小片 | av无码久久久久不卡免费网站 | 亚洲一区二区三区国产精华液 | 欧美日韩在线亚洲综合国产人 | 亚洲综合精品香蕉久久网 | 亚洲色大成网站www国产 | 伦伦影院午夜理论片 | 亚洲中文字幕无码一久久区 | 日本又色又爽又黄的a片18禁 | 中文字幕乱妇无码av在线 | 精品无码一区二区三区的天堂 | 国产黄在线观看免费观看不卡 | 精品aⅴ一区二区三区 | 欧美成人家庭影院 | 国产综合色产在线精品 | 中文字幕无码日韩专区 | 婷婷六月久久综合丁香 | 国产手机在线αⅴ片无码观看 | 色综合久久久无码中文字幕 | 国产成人无码专区 | 正在播放东北夫妻内射 | 免费视频欧美无人区码 | 国产无遮挡又黄又爽又色 | 在线观看欧美一区二区三区 | 亚洲日韩精品欧美一区二区 | 强辱丰满人妻hd中文字幕 | 4hu四虎永久在线观看 | 丰满人妻精品国产99aⅴ | 天天拍夜夜添久久精品大 | 国产av人人夜夜澡人人爽麻豆 | 亚洲色在线无码国产精品不卡 | 伊人久久大香线焦av综合影院 | 日韩精品乱码av一区二区 | 成人欧美一区二区三区黑人免费 | 东京无码熟妇人妻av在线网址 | 亚洲午夜久久久影院 | 麻豆精产国品 | 99久久亚洲精品无码毛片 | 熟妇人妻无码xxx视频 | 日韩少妇白浆无码系列 | 日韩在线不卡免费视频一区 | 日韩欧美中文字幕公布 | 丰满人妻精品国产99aⅴ | 国产精品久久久久久无码 | 强辱丰满人妻hd中文字幕 | 夜夜躁日日躁狠狠久久av | 日日摸天天摸爽爽狠狠97 | 久久亚洲日韩精品一区二区三区 | 精品人妻中文字幕有码在线 | 女人高潮内射99精品 | 亚无码乱人伦一区二区 | 欧美日韩在线亚洲综合国产人 | 久久精品国产一区二区三区肥胖 | 成年美女黄网站色大免费全看 | 午夜熟女插插xx免费视频 | 亚洲爆乳大丰满无码专区 | 免费国产黄网站在线观看 | 欧美日韩亚洲国产精品 | 老头边吃奶边弄进去呻吟 | 午夜精品久久久内射近拍高清 | 精品久久久久久人妻无码中文字幕 | 一本色道婷婷久久欧美 | 国产精品亚洲专区无码不卡 | 久久精品中文字幕大胸 | 特黄特色大片免费播放器图片 | 18黄暴禁片在线观看 | 日韩精品无码免费一区二区三区 | 久久精品女人天堂av免费观看 | 国产精品香蕉在线观看 | 黑森林福利视频导航 | 国产无遮挡又黄又爽免费视频 | 蜜臀av无码人妻精品 | 四虎影视成人永久免费观看视频 | 性色av无码免费一区二区三区 | 国内精品人妻无码久久久影院蜜桃 | 国产精品美女久久久久av爽李琼 | 内射白嫩少妇超碰 | 亚洲人成网站免费播放 | 日韩av无码一区二区三区不卡 | 国产精品亚洲一区二区三区喷水 | 中文字幕人妻无码一区二区三区 | 小sao货水好多真紧h无码视频 | 亚洲日韩中文字幕在线播放 | а√天堂www在线天堂小说 | 国产av无码专区亚洲awww | 日韩精品一区二区av在线 | 在线播放免费人成毛片乱码 | 国产超碰人人爽人人做人人添 | 国内精品九九久久久精品 | 午夜不卡av免费 一本久久a久久精品vr综合 | 爽爽影院免费观看 | 日韩欧美中文字幕公布 | 国产乱人无码伦av在线a | 国产av无码专区亚洲a∨毛片 | 欧美喷潮久久久xxxxx | 久久久久久a亚洲欧洲av冫 | 亚洲综合精品香蕉久久网 | 日韩欧美中文字幕公布 | av人摸人人人澡人人超碰下载 | 色五月五月丁香亚洲综合网 | 日韩欧美成人免费观看 | 麻豆人妻少妇精品无码专区 | 国内揄拍国内精品少妇国语 | 亚洲成a人片在线观看日本 | 亚洲一区av无码专区在线观看 | 国产综合色产在线精品 | 亚洲人成无码网www | 久久99久久99精品中文字幕 | а√天堂www在线天堂小说 | 小sao货水好多真紧h无码视频 | 国产两女互慰高潮视频在线观看 | 中文字幕日韩精品一区二区三区 | 中文字幕色婷婷在线视频 | 亚洲综合无码久久精品综合 | 欧美三级不卡在线观看 | 亚洲精品久久久久久一区二区 | 蜜桃av抽搐高潮一区二区 | 色综合久久久无码中文字幕 | 亚洲男人av香蕉爽爽爽爽 | 无码人中文字幕 | 老太婆性杂交欧美肥老太 | 99久久精品国产一区二区蜜芽 | 精品无人区无码乱码毛片国产 | 久久国产精品_国产精品 | 日韩 欧美 动漫 国产 制服 | 亚洲七七久久桃花影院 | 亚洲欧美日韩成人高清在线一区 | 免费中文字幕日韩欧美 | 午夜福利不卡在线视频 | 日本熟妇大屁股人妻 | 久久久久av无码免费网 | 大乳丰满人妻中文字幕日本 | 天干天干啦夜天干天2017 | 97久久超碰中文字幕 | 沈阳熟女露脸对白视频 | 牲欲强的熟妇农村老妇女 | 午夜精品久久久久久久久 | 久久久久成人精品免费播放动漫 | 人妻天天爽夜夜爽一区二区 | 日欧一片内射va在线影院 | 性欧美牲交在线视频 | 狠狠亚洲超碰狼人久久 | 免费男性肉肉影院 | 亚洲男人av天堂午夜在 | 在线播放免费人成毛片乱码 | 午夜免费福利小电影 | 国产精品久免费的黄网站 | 欧美自拍另类欧美综合图片区 | 熟妇人妻中文av无码 | 国产97在线 | 亚洲 | 中文字幕 人妻熟女 | 亚洲精品一区国产 | 亚洲欧美国产精品专区久久 | 国产xxx69麻豆国语对白 | 久久综合给久久狠狠97色 | 色综合久久中文娱乐网 | 女人色极品影院 | 久久无码中文字幕免费影院蜜桃 | 亚洲综合精品香蕉久久网 | 中文字幕乱码亚洲无线三区 | 亚洲小说春色综合另类 | 无码人妻丰满熟妇区五十路百度 | 亚洲精品一区二区三区在线观看 | 奇米影视888欧美在线观看 | 熟女少妇人妻中文字幕 | 日本大香伊一区二区三区 | 国产激情无码一区二区app | 国产高清av在线播放 | 麻豆精品国产精华精华液好用吗 | 欧美日韩在线亚洲综合国产人 | 国产真实伦对白全集 | 亚洲日韩乱码中文无码蜜桃臀网站 | 奇米影视7777久久精品人人爽 | 亚洲精品久久久久久久久久久 | 人妻夜夜爽天天爽三区 | 无码毛片视频一区二区本码 | 国产无套内射久久久国产 | 暴力强奷在线播放无码 | 日韩人妻无码中文字幕视频 | 沈阳熟女露脸对白视频 | 欧洲精品码一区二区三区免费看 | 玩弄中年熟妇正在播放 | 国产农村乱对白刺激视频 | 国产精品99爱免费视频 | 人妻互换免费中文字幕 | 牲欲强的熟妇农村老妇女视频 | 97久久国产亚洲精品超碰热 | 俺去俺来也在线www色官网 | 国产午夜福利100集发布 | 日日摸夜夜摸狠狠摸婷婷 | 亚洲男人av天堂午夜在 | 久久久久免费看成人影片 | 激情五月综合色婷婷一区二区 | 国产成人无码a区在线观看视频app | 99久久久无码国产aaa精品 | 亚洲人交乣女bbw | 日韩人妻无码一区二区三区久久99 | 精品乱子伦一区二区三区 | 精品一区二区三区波多野结衣 | 一二三四社区在线中文视频 | 久久精品国产一区二区三区 | 国产综合色产在线精品 | 午夜精品一区二区三区的区别 | 久久国产36精品色熟妇 | 伊在人天堂亚洲香蕉精品区 | 欧美日本日韩 | 国产精品igao视频网 | 精品少妇爆乳无码av无码专区 |