我想知道如何构建一个使用spring数据neo4j组合Fulltext和Simple索引的Cypher查询。考虑以下节点实体:
@NodeEntity
public class SomeObject {
public SomeObject() {
}
public SomeObject(String name, int height) {
this.name = name;
this.height = height;
}
@Indexed(indexType = IndexType.FULLTEXT, indexName = "search_name")
String name;
@Indexed(numeric = false)
int height;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
好的,所以我的问题是如何通过引用它们的简单索引和全文索引来运行从SomeObject
节点开始的查询(通过使用SomeObject
图形存储库)。相同的查询。例如,我想写类似的东西:
START n=node:SomeObject('name: Roy AND height: [170 TO 190]') RETURN n
我知道我不能完全这样写,因为spring数据neo4j迫使我为需要FULLTEXT索引的字段给出一个单独的索引名称。但是,如果我需要对我的SomeObject
实体进行索引查找,并将两个文件组合起来呢? (姓名和身高)
在这种情况下,最佳做法是什么?有没有办法在同一个查询中将它们组合在一起?或者我应该分别查询它们中的每一个,然后在两个结果之间执行某种某种交集,这样我就能得到满足我原始查询查询条件的节点? (name: Roy AND height: [170 TO 190]
)。
谢谢! 罗伊。
答案 0 :(得分:1)
我永远不会发起两个单独的查询。也许只使用一个索引作为查询的起点?
START n=node:search_name('name: Roy')
WHERE n.height >= 170 AND n.height <= 190
RETURN n
此查询的性能如何?这绕过了SomeObject索引,但是我没有看到任何其他选项,因为你确实无法组合这两个索引。
我也在考虑以下查询,但你仍然会得到重复:
START n=node:search_name('name: Roy'), m=node:SomeObject('height: [170 TO 190]')
RETURN DISTINCT n,m