2015-04-14 104 views
1

我在我的Neo4j數據庫中設置了全文autoindex。優化neo4j lucene索引

需要明確的是,在這種情況下,Neo4j的總是使用Lucene做索引。 目前我有大約2000萬個節點,可能很快就會增加到超過4000萬個節點。

對於大多數的查詢性能優良,幾乎是一瞬間,但有時候查詢,如

"*term*" 

需要20秒返回。

你能分享優化的Neo4j和Lucene執行更快的全文搜索的一些技巧?也許我應該修改一些緩存屬性?

的基本配置在Docs是很好的解釋,但任何有關如何配置和/或改變Lucene的內部Neo4j的行爲有點寫得很好,導遊都很難找到。

+0

也許你可以分享你的數據模型和查詢/代碼? –

回答

1

我認爲你的主要問題是,您使用的是領先的通配符那裏。 See other answers about lucene performance in general on leading wildcards

如果你只是尋找一個簡單的名詞,你可能希望從文檔中提取術語和由該術語並將其鏈接到不同的節點,這樣就可以利用圖形連接,以獲得含有一個詞的文檔。

無論您如何構建索引,此查詢「term」必須查看數據庫中每個字符串的每個可能的子字符串,這需要很長時間。

你可能想看看標化您的文件和提取這些關鍵條款,讓你到底有沒有這樣的事情:

(d:Document)-[:contains]->(t:Term { term: "foo" }); 

然後,當你想知道哪些文件具有「富」在其中,你不這樣做Lucene的了,但這樣的:

MATCH (t:Term {term: "foo"})<-[:contains]-(d:Document) 
RETURN d; 

我希望這將是很多很多,更快但需要你做的前端,術語提取。它也將工作多爲簡單的術語,而不是像查詢[富2 O 2 O 2條]