我想在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
'sa'和'searchfield'的值是什麼? – femtoRgon
sa是用戶輸入的查詢。 String sa = textbox1.Text和String String [] SearchField = new string [] {「ID」,「First Name」,「Last Name」,「DOB」}; – Huzaifa