[英]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_index
和Article.tire.index.import Article.all
。
已建立索引的文档中的_source
字段应包含title
, id
和body
,以使其可用于搜索。
无论如何,随着elasticsearch
宝石的发布, tire
已经退休了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.