2012-12-05 84 views
1

我正在使用Neo4j通过php库的网站上工作。困扰我的事情是我的建议显示速度很慢(1-3秒)。他们应该立即出现almoast。我使用jQuery用户界面自动完成用于显示的结果,下面的暗号查询:Neo4j密码查询加速

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

没有人有任何优化的想法,或可有人告诉我,我到底做错了什么?

+0

但对于查询的实际性能?你测量过了吗?也许你的瓶颈在别的地方? – SelimOber

+0

我确定了它。在本地主机上,我得到了大约110-120ms,在服务器上我得到了620ms(这是非常高:()。 –

+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"; 

你能否用这个查询来测量时间?

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