2012-10-25 40 views
0

我正在使用Gremlin和Neo4j來處理來自infochimps的ENRON dataset。該數據集有兩種類型的頂點MessageEmail Addresss以及兩種邊緣SENTRECEVIED_BY。我想在此數據集上創建一個自定義索引,爲type: 'Message'的每個頂點創建Lucene文檔,並將關聯頂點的信息(例如v.in(),v.out())合併爲Lucene文檔中的附加字段。如何爲Neo4j圖形構建一個自定義的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程序更好?
+0

你設法解決這個問題嗎?我面臨着同樣的問題......(具體來說,我擔心你的問題中的子彈1和2)。 – gipouf

回答

0

我會在這裏談論直接Neo4j訪問,因爲我在Gremlin中旅行不是很好。

所以你想建立一個「圖外」的Lucene索引?否則,您可以使用內置的graphDb.index()。forNodes(「myIndex」,configForMyIndex)來獲取(根據需要創建)與neo4j關聯的Lucene索引。然後,您可以通過調用index.add(node,key,value)向每個文檔添加多個字段,其中每個節點將由該Lucene索引中的一個文檔表示。

1)在Gremiln ......我不知道

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

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

4)你需要完全的數據庫之外創建它?如果是這樣,爲什麼?

+0

我曾見過這個例子,但它不允許我指定分析器。請參閱頁面底部有關高級索引的評論(上面的第二個鏈接)。 –

0

我剛剛完成了一個Java進程的導入,它非常容易,我認爲通過Gremlin更好。

無論如何,如果進程失敗是因爲您無法創建StandardAnalyzer的新對象。該類的所有構造函數都需要參數,因此您應該創建一個包裝類或使用正確版本的Lucene(如構造函數中的參數)創建它。

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

相關問題