Java Lucene文档结构以正确分组密钥集合
我有这样一个Java模型(省略了一些字段): 假设这只是许多文档中的一个,我可以这样搜索:Java Lucene文档结构以正确分组密钥集合,java,lucene,compass-lucene,Java,Lucene,Compass Lucene,我有这样一个Java模型(省略了一些字段): 假设这只是许多文档中的一个,我可以这样搜索: 查找名称以开头且有男婴的人 $/person/name:an* AND $/person/children/sex:male $/person/children/sex:male AND $/person/children/sex:female 查找有男婴和女婴的人 $/person/name:an* AND $/person/children/sex:male $/person/children
$/person/name:an* AND $/person/children/sex:male
$/person/children/sex:male AND $/person/children/sex:female
$/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
这将返回一个结果,我知道为什么。我希望这不会返回任何结果。我的问题是如何区分或关联这些嵌套属性,以便查询返回有效数据
我曾考虑:
$/person/children/1/name:luke
$/person/children/name:luke1 or $/person/children/name:1luke
id
字段对这些字段进行分组。我还没能想出一个“正确”的方法。我曾考虑过:
$/person/children/1/name:luke
$/person/children/name:luke1 or $/person/children/name:1luke
我不熟悉Compass,但在Lucene级别,您可以使用BlockJoinQuery将子文档嵌套到父文档中并进行查询 Mike McCandless在Lucene 3.4[1]中有一篇关于使用BlockJoinQuery的优秀博客文章。这应该给你基本的概念。但是在Lucene 4中,API已经更改,现在位于
org.apache.search.Lucene.join
包下。Javadoc[2]中有一个代码示例
[1] [2] 这肯定是正确的答案,但软件中总是有一个警告。Compass框架几乎被封存,并且停留在Lucene的2.9版上,因此很遗憾,我无法利用这些改进。谢谢你的建议!考虑到罗盘的发展被放弃(作者继续发展弹性搜索),你不考虑交换堆栈吗?如果你真的想要注释抽象,有一个Hibernate搜索,它与Lucene一起工作,这绝对是我们想要做的事情。我希望在此期间我们能做些什么来满足这一要求,但这看起来像是一条死胡同。谢谢你的帮助!