我到处都看,但没有什么可以帮助我。我无法弄清楚问题是什么。
我的模特
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
实现此初始化后,一切似乎都正常
答案 0 :(得分:1)
使用tire
时我也遇到过这样的问题。删除索引后,您可以尝试Article.create_elasticsearch_index
和Article.tire.index.import Article.all
。
索引文档中的_source
字段应包含title
,id
和body
,以便进行搜索。
无论如何,tire
已经退役,elasticsearch
gem现已发布。