Neo4j cypher查询速度加快

时间:2012-12-05 17:11:22

标签: neo4j cypher

我正在开发一个使用Neo4j的网站。困扰我的是我的建议很慢(1-3秒)。它们应该瞬间出现。我正在使用Jquery ui Autocomplete来显示结果,以及以下cypher查询:

$query = "START n = node:Destination('name:*')
          WHERE  ( n.name =~ '(?i).*".$input.".*' OR n.name2 =~ '(?i).*".$input.".*' ) AND has( n.published )
          RETURN n
          LIMIT 6";

有没有人有任何优化想法,或者有人能告诉我我做错了什么?

2 个答案:

答案 0 :(得分:0)

为什么要在所有目标节点中搜索,并且只在已插入输入中的where子句中进行搜索?你可以把它放到定义条款中:

$query = "START n = node:Destination('name:".$input."*'),n2 = node:Destination('name2:".$input."*')
          WHERE   has( n.published ) AND has (n2.published)
          RETURN n,n2
          LIMIT 6";

你可以用这个查询测量时间吗?

答案 1 :(得分:0)

来自@maxdemarzi的回答

START n = node:Destination('name:*')< - 错误

在这里查看搜索示例=> http://maxdemarzi.com/2012/11/14/crunchbase-on-neo4j/

query = "name:*#{params[:term]}* OR name2:*#{params[:term]}*"

get '/search' do 
  content_type :json
  neo = Neography::Rest.new    

  cypher = "START me=node:node_index({query}) 
            RETURN ID(me), me.name
            ORDER BY me.name
            LIMIT 15"
  query = "permalink:*#{params[:term]}* OR name:*#{params[:term]}*"
  neo.execute_query(cypher, 
                    {:query => query })["data"].
                      map{|x| 
                           { label: x[1], 
                             value: x[0] }
                         }.to_json   
end