2013-06-12 55 views
4

我想在Lucene中評分相似的文檔。讓我解釋一下我的情況。如何在Lucene中得到類似的文件?

例如可以說我在我創建索引的文件中有以下記錄。

 
ID|First Name|Last Name|DOB 
1 |John  |Doe  |03/18/1990 
1 |John  |Twain |03/18/1990 
3 |Joey  |Johnson |05/14/1978 
3 |Joey  |Johnson |05/14/1987 
4 |Joey  |Johnson |05/14/1987 

當我搜索「張三」

我創建將按照以下順序

 
ID|First Name|Last Name|DOB 
1 |John  |Doe  |03/18/1990 
3 |Joey  |Johnson |05/14/1978 
3 |Joey  |Johnson |05/14/1987 
4 |Joey  |Johnson |05/14/1987 
1 |John  |Twain |03/18/1990 
2 |Daniel |Doe  |03/25/1989 

顯示的記錄正如你所看到的Lucene搜索索引是根據顯示的記錄我搜索的術語,但不是根據記錄之間的相似性。我希望它用提供的術語搜索記錄,但根據它們的相似性顯示它們。

我想

 
ID|First Name|Last Name|DOB 
1 |John  |Doe  |03/18/1990 
1 |John  |Twain |03/18/1990 
3 |Joey  |Johnson |05/14/1978 
3 |Joey  |Johnson |05/14/1987 
4 |Joey  |Johnson |05/14/1987 
2 |Daniel |Doe  |03/25/1989 

這裏什麼紀錄約翰·吐溫和李四同時顯示,因爲它們都是相似的,其中一人有最大的用戶查詢相匹配。

你是否在找我?

搜索代碼。

String sa=textbox1.Text; // Assume this value to be John Doe in this case. 
String[] searchfield= new string[] { "ID", "First Name", "Last Name","DOB"}; 
IndexReader reader = IndexReader.Open(dir, true); 
TopScoreDocCollector coll = TopScoreDocCollector.Create(50, true); 
indexSearcher.Search(QueryMaker(sa, searchfield), coll); 
     ScoreDoc[] hits = coll.TopDocs().ScoreDocs; 
for (int i = 0; i < hits.Length; i++) 
     { 
      SearchResults result = new SearchResults(); 
      int docID = hits[i].Doc; 
      Document d = indexSearcher.Doc(docID); 
      result.fname=d.Get("First Name").ToString(); 
     } 

嘗試方法:

我試圖用MoreLikeThis類,但不知道如果我的權利,甚至如果正確的方法做這件事。此外,我將如何使用Like方法來處理兩個或更多的docid?

IndexSearcher mltsearcher = new IndexSearcher(reader); 
MoreLikeThis mlt = new MoreLikeThis(reader); 
int docid =hits[1].Doc; 
Query query = mlt.Like(docid); 
TopDocs similardocs = mltsearcher.Search(query, 10); 

請讓我知道如果您有任何問題:另外,如果使用文檔ID的,因爲我是從同一個讀者閱讀

代碼會顯示重複的文件。

我想學習過去兩週的Lucene,所以不太瞭解它。

注:我使用Lucene.Net 3.0.3

+0

'sa'和'searchfield'的值是什麼? – femtoRgon

+0

sa是用戶輸入的查詢。 String sa = textbox1.Text和String String [] SearchField = new string [] {「ID」,「First Name」,「Last Name」,「DOB」}; – Huzaifa

回答

2

,你能否告訴方法QueryMaker()的代碼?

我認爲您可以創建一個新字段"name",它由名字和姓氏組成,您可以使用FuzzyQuery在新字段中搜索。根據字符串的levenshtein距離,FuzzyQuery是得分文檔。

相關問題