如何为Neo4j图建立自定义Lucene索引?

时间:2012-10-25 01:22:00

标签: neo4j gremlin

我正在使用Gremlin和Neo4j操纵来自infochimps的ENRON dataset。此数据集有两种类型的顶点:MessageEmail Addresss以及两种类型的边SENTRECEVIED_BY。我想在此数据集上创建一个自定义索引,为Lucene的每个顶点创建一个type: 'Message'文档,并合并来自关联顶点的信息(例如v.in()v.out())作为Lucene文档中的其他字段。

我正在考虑

的代码
g = new Neo4jGraph('enron');

PerFieldAnalyzerWrapper analyzer =
    new PerFieldAnalyzerWrapper(new StandardAnalyzer());
analyzer.addAnalyzer("sender", new KeywordAnalyzer());
analyzer.addAnalyzer("recipient", new KeywordAnalyzer());

IndexWriter idx = new IndexWriter (dir,analyzer,IndexWriter.MaxFieldLength.UNLIMITED);

g.V.filter{it.type == 'Message'}.each { v ->
    Document doc = new Document();
    doc.add(new Field("subject", v.subject));
    doc.add(new Field("body", v.body));
    doc.add(new Field("sender", v.in().address);
    v.out().each { recipient -> 
        doc.add(new Field("recipient", recipient.address));
    }
    idx.addDocument(doc);
}
idx.close();

我的问题是:

  1. 有没有更好的方法来枚举顶点以进行索引?
  2. 我可以为此使用自动索引吗?如果是,我该如何指定应编入索引的内容?
  3. 我可以指定自己的Analyzer,还是我坚持默认?什么是默认值?
  4. 如果我必须创建自己的索引,我是否应该使用gremlin,或者我最好使用Java程序?

2 个答案:

答案 0 :(得分:0)

我将在这里谈论直接进入Neo4j,因为我在格雷姆林旅行不好。

所以你想在图表本身之外构建一个Lucene索引?否则,您可以使用内置的graphDb.index()。forNodes(“myIndex”,configForMyIndex)来获取(按需创建)与neo4j关联的Lucene索引。然后,您可以通过调用index.add(node,key,value)为每个文档添加多个字段,其中每个节点将由该Lucene索引中的一个文档表示。

1)在格雷米尔......我不知道

2)见http://docs.neo4j.org/chunked/milestone/auto-indexing.html

3)见http://docs.neo4j.org/chunked/milestone/indexing-create-advanced.html

4)你需要在db之外完全创建吗?如果是这样,为什么?

答案 1 :(得分:0)

我刚刚使用Java进程完成导入,这非常简单,在我看来,通过Gremlin更好地包容。

无论如何,如果进程失败是因为你无法创建StandardAnalyzer的新对象。该类的所有构造函数都需要参数,因此您应该创建一个包装类,或者使用正确版本的Lucene(如构造函数中的paramater)创建它。

Neo4J,直到今天,只接受lucene版本36。

相关问题