2012-12-05 6 views
1

Neo4j를 사용하는 사이트에서 PHP 라이브러리를 만들고 있습니다. 나를 귀찮게하는 것은 제 제안이 매우 느리게 나타납니다 (1-3 초). 그들은 순간적으로 잠잠 해져야합니다. 나는 결과를 보여주는 UI를 jQuery 자동 완성 기능을 사용하여, 다음과 같은 사이퍼 쿼리 오전 :Neo4j 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"; 

사람이 어떤 최적화 아이디어가 있는가, 또는 누군가가 내가 뭘 잘못 말해 줄 수?

+0

그러나 무엇을 가지고 ? 그것을 측정 했습니까? 어쩌면 병목 현상이 다른 곳에서 발생했을 수도 있습니다. – SelimOber

+0

내가 그걸 들었다. localhost에서 약 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"; 

이 쿼리로 시간을 측정 해 주시겠습니까?

START n = node:Destination('name:*') < @maxdemarzi에서

0

대답 -

나쁜 쿼리의 실제 성능에 대한 여기에 검색 예를 살펴 => 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