繁体   English   中英

ElasticSearch +仅在id字段上进行轮胎搜索

[英]ElasticSearch + Tire searching only on id field

我到处都看过,但是没有什么可以帮助我。 而且我不知道是什么问题。

我的模特

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'没有给出结果,但是有标题为“ love”的Article,我试图建立许多请求,但是没有任何效果。

所有时间都是相同的结果:

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

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

因此在我看来,无论模型上的映射索引如何,tyre都只会在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

实现此初始化后,一切似乎都可以正常工作

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

已建立索引的文档中的_source字段应包含titleidbody ,以使其可用于搜索。

无论如何,随着elasticsearch宝石的发布, tire已经退休了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM