的集合我有一個Java模型是這樣的(某些字段省略):Lucene的文檔結構正確組鍵
@Searchable(root=true)
class Person {
@SearchableProperty
String sex;
@SearchableProperty
String name;
}
class Parent extends Person {
@SearchableComponent
List<Person> children;
}
這個模型創建一個Lucene文檔與人阿納金以下數據:
$/person/sex:male
$/person/name:anakin
$/person/children/sex:male
$/person/children/name:luke
$/person/children/sex:female
$/person/children/name:leia
假設這只是許多文件之一,我可以搜索這樣的:
查找PE有一個名字rsons開始的,有一個男孩
$/person/name:an* AND $/person/children/sex:male
找到了男孩和女童的人
$/person/children/sex:male AND $/person/children/sex:female
我試圖找到一個孩子時遇到麻煩與具體的名稱和性別,像這樣
$/person/children/sex:male AND $/person/children/name:leia
這將返回一個結果,我可以看到爲什麼。我希望這不會返回任何結果。我的問題是如何區分或關聯這些嵌套的屬性,以便我的查詢返回有效的數據?
我已經考慮:
存放兒童作爲單獨的文件,但通過這樣做我失去了我上面寫的方式進行搜索的能力。
在查詢中以某種方式使用
id
字段來對這些字段進行分組。我無法想出一個「正確」的方式。變我也考慮過:$/person/children/1/name:luke $/person/children/name:luke1 or $/person/children/name:1luke
這絕對是正確的答案,但在軟件總是有一個警告。 Compass框架幾乎都是沒有限制的,並且停留在Lucene 2.9版上,所以不幸的是我無法利用這些改進。感謝您的建議! – acanby 2014-10-13 03:46:28
考慮到Compass開發被放棄(作者繼續開發ElasticSearch)你會不會考慮切換堆棧?如果你真的想要註解抽象,那麼Hibernate Search可以和Lucene一起工作http://hibernate.org/search/ – bcoughlan 2014-10-14 14:25:22
絕對是我們正在尋找的東西。我希望在此期間我們可以做些事情來滿足這個要求,但這看起來像是一個死衚衕。謝謝你的幫助! – acanby 2014-10-15 00:57:42