2012-06-30 131 views
0

這是我第一次使用Lucene的,我有一個文本文件是這樣的:如何使用Lucene索引和搜索結構文本文件?

id,name,address,hobby 
1,namm1,address1,football 
2,namm2,address2,football 
3,namm3,address3,football 
4,namm4,address4,football 
5,namm5,address5,football 
6,namm6,address6,basketball 
7,namm7,address7,basketball 
8,namm8,address1,football 
9,namm9,address8,swimming 
... 

上面的文件是一個文本文件,其中包含百萬行。現在,我要查找其地址爲address1和愛好是從文件football記錄,然後把記錄到一次像這樣的文件:

1,namm1,address1,football 
8,namm8,address1,football 
... 

第一個文件是非常大的,所以這將是非常慢慢找到一個又一個的記錄。我想用Lucene爲第一個文件建立一個索引(根據地址和愛好)。然後,我可以快速找到地址爲address1,其業餘愛好爲football的記錄,並將其放入新文件中。我從來沒有使用Lucene進行編程。誰能給我一個類似的例子?

+2

你爲什麼這麼渴望使用它的lucene? lucene和IR一般用於非結構化文本。對於結構化文本,可以使用結構化數據庫和sql - 這可能會簡單得多 – amit

+0

謝謝您的回覆。實際上,我遇到的問題要複雜得多。爲了明確問題,我簡化了它。我已經使用數據庫來解決問題。但後來,需要更新數千萬條記錄,需要建立大量的臨時表。時間複雜度和空間複雜度都太難了。所以我想試試Lucene。謝謝! –

回答

0

這很簡單。當你用Lucene索引一個文件時,你可以定義你自己的「Analyzer」。簡而言之,分析器從源中提取信息並將其放入lucene「文檔」的「字段」中。

當你搜索一些東西時,你可以定義Lucene應該考慮哪些字段。

因此,您的解決方案是編寫一個分析器,將每列放入一個字段。使用MultiFieldQueryParser並在您的查詢中指定字段名稱。對於你的榜樣,查詢將

address:address1 hobby:football 
+0

我只是把我的評論放在答案中 – Persimmonium

0

我不認爲他需要在所有寫一個分析,他可以只使用Java代碼來分析每一行的每個值在相應的字段,使用一個許多內建的分析儀