我正在开发一个使用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";
有没有人有任何优化想法,或者有人能告诉我我做错了什么?
答案 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