我正在使用Gremlin和Neo4j操纵来自infochimps的ENRON dataset。此数据集有两种类型的顶点:Message
和Email Addresss
以及两种类型的边SENT
和RECEVIED_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();
我的问题是:
Analyzer
,还是我坚持默认?什么是默认值?答案 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。