问题在实体上执行全文搜索

时间:2012-06-13 18:29:13

标签: ruby-on-rails ruby neo4j

我正在使用neo4j作为Ruby on Rails项目的后端,我正在尝试实现一些搜索功能。贝娄是我的模特:

class Entity < Neo4j::Rails::Model
    property :name
    has_n(:friends).to(Entity)
    index :name, :type => :fulltext
end

我用以下内容创建了记录:

Neo4j::Transaction.run do
  Entity.destroy_all

  tony = Entity.new :name => "Tony Soprano"
  paulie = Entity.new :name => "Paulie Gualtieri"
  robert = Entity.new :name => "Robert Baccalier"
  silvio = Entity.new :name => "Silvio Dante"

  tony.friends << paulie << robert << silvio
  tony.save
end

最后,我的搜索方法如下:

def search
  terms = params[:q]

  render :json => Entity.all(:name => terms, :type => :fulltext)
end

当我运行上述搜索方法时,我收到以下错误:no index on field type

我已经阅读了Neo4j-Rails指南的Fulltext Search部分,但我没有看到我错过了这项工作。我的理解是:由于我配置模型的方式,应该对name属性建立索引。

1 个答案:

答案 0 :(得分:1)

您使用的是哪个版本的neo4j.rb?如果您使用的是2.0,则应查看Neo4j Github Wiki Pages

以下是如何使用2.0解决该问题的示例:

Entity.all("name: hello*", :type => :fulltext).count

我想这也适用于Neo4j.rb 1.3.1。 散列查询不适用于全文搜索。

以下查询:

Entity.all(:name => "hello*", :type => :fulltext).count

将使用精确的lucene索引并查询两个字段:nametype