2012-12-10 46 views
1

域對象的一個​​一對多的關係,我有一個對象,具有下列數據處理在Lucene的

String key 
String name 
List<String> address 

我將如何創建文檔的Lucene用於上述目的,我不得不對名稱和地址搜索,我創造了指數上的名字,但我也想爲前

key:1 name:sam address:lane no 1 behind la gardens 
key:1 name:sam address:near abc cross main road 
創建地址
指數

如何將我創建和存儲索引應該我必須存儲兩個文件與黎民名稱和關鍵

回答

0
Document temp = new Document(); 
temp.add(new Field("name", "sam", Field.Store.YES, Field.Index.ANALYZED)); 
temp.add(new Field("address", "lane no 1 behind la gardens", Field.Store.YES, 
        Field.Index.ANALYZED)); 
indexWriter.addDocument(temp); 

搜索像

name:sam address:gardens 

會導致上述文件

0

如果我理解正確的匹配,你希望相關地址的任意數,可回收分開,但搜索只是爲:

address:"my address" 

我會建議存儲地址命名你喜歡什麼(我將在這裏使用'address1'和'address2'),並積累ir文本放入一個大的舊地址欄中。喜歡的東西:

doc.add(new Field("key", "1", Field.Store.YES, Field.Index.ANALYZED)); 
doc.add(new Field("name", "sam", Field.Store.YES, Field.Index.ANALYZED)); 
doc.add(new Field("address", "lane no 1 behind la gardens near abc cross main road", Field.Store.NO, Field.Index.ANALYZED)); 
//Note, that you can add multiple fields with the same name, and it will effectively be merged together, as: 
doc.add(new Field("address", "more address information for searching", Field.Store.NO, Field.Index.ANALYZED)); 
doc.add(new Field("address1", "lane no 1 behind la gardens", Field.Store.YES, Field.Index.NO)); 
doc.add(new Field("address2", "near abc cross main road", Field.Store.YES, Field.Index.NO)); 

注意地址傳遞Field.Store.NOField.Index.ANALYZED,而地址1和地址2傳遞Field.Store.YESField.Index.NO。因此,您在'地址'上進行搜索,但從未在'地址1'或'地址2'上搜索,並且您從找到的文檔中檢索'地址1'和'地址2',但從不'地址'