0

我到处寻找,但没有什么能帮助我。而且我不知道是什么问题。

我的模型

class Article
 include Mongoid::Document
 include Mongoid::Timestamps


 include Tire::Model::Search
 include Tire::Model::Callbacks
  mapping do
    indexes :_id, :index => :not_analyzed
    indexes :title
    indexes :body
  end


 def to_indexed_json
   self.to_json
 end

http://localhost:9200/articles/_mapping
{
  "articles": {
    "article": {
      "properties": {
        "$oid": {
          "type": "string"
        },
        "body": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      }
    }
  }
}

Article.search 'love'没有结果,但有标题为“爱”的文章,我尝试建立很多请求,但没有任何效果。

总是相同的结果:

"hits"=>{"total"=>0, "max_score"=>nil, "hits"=>[]}}

但是如果我输入:Article.search "cbc267c955464f22d72a0100" 它会给我标题为“爱”的文章

所以在我看来,轮胎只在 ID 字段上创建索引,而不管模型上的映射索引。

当我重新创建索引时

Article.index_name
  => "articles" 
Tire.index('articles').delete
  => true 
Article.import

我的映射变为:

{
  "articles": {
    "article": {
      "properties": {
        "$oid": {
          "type": "string"
        }
      }
    }
  }
}

更新

module BSON
  class ObjectId
    def as_json(*args)
      to_s()
    end

    def to_json(*args)
      MultiJson.encode(as_json())
    end
  end
end

实施此初始化后,一切似乎都正常

4

1 回答 1

1

我在使用的时候也遇到过这样的问题tire。删除索引后,您可以尝试Article.create_elasticsearch_indexArticle.tire.index.import Article.all.

_source索引文档中的字段应该包含并包含在其中title,这应该使其可用于搜索。idbody

无论如何,由于gem 现已发布,tire因此即将退休。elasticsearch

于 2013-10-22T20:47:21.353 回答