Spring Data Neo4j - 在同一个Cypher查询中结合全文和简单索引

时间:2013-05-03 13:35:06

标签: spring neo4j spring-data cypher spring-data-neo4j

我想知道如何构建一个使用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])。

谢谢! 罗伊。

1 个答案:

答案 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