问题已解决,看 5 楼
最近要给项目搜索添加分词功能,然后上了 ES,使用 ik 插件。本地试了 ik 插件 readme 的 demo,也试过网上其他 demo,都能顺利导入索引并分词搜索。但是自己的项目导入索引成功,但是搜索怎么都 0 命中。
我看了 ik 的官网 readme 中的 demo,我 get 单个数据返回的是这样的
get 请求: curl -XGET http://localhost:9200/index/fulltext/1
get 返回:
{"_index":"index","_type":"fulltext","_id":"1","_version":1,"found":true,"_source":
{"content":"美国留给伊拉克的是个烂摊子吗"}
}
然后我试了下自己的项目,返回是这样的:
{
"_index" : "app",
"_type" : "food",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : {
"food" : {
"appraise" : "小麦富含淀粉、蛋白质、脂肪、矿物质、钙、铁、硫胺素、核黄素、烟酸、维生素A及维生素C等,是主要的主食来源,适宜减肥期间食用。"
}
}
}
试了下别的 demo,在 Rails Console 里面调用 Model.first.as_indexed_json 返回的一般是这样的:
{"content":"美国留给伊拉克的是个烂摊子吗"}
但是我这个项目返回时这样的:
{"food"=>{"appraise"=>"小麦富含淀粉、蛋白质、脂肪、矿物质、钙、铁、硫胺素、核黄素、烟酸、维生素A及维生素C等,是主要的主食来源,适宜减肥期间食用。"}}
不知道为什么外面还有层food
。。。。尝试手动向 ES 加入一个没有 food 的索引能够搜索成功
在我的 Food Model 里面 as_indexed_json 方法是这样的:
def as_indexed_json(options = nil)
as_json(
only: [:appraise]
)
end
跟别的 demo 也一样,但是结果不知道为什么会多一个 Food 出来