2012-12-05 120 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