我使用的是ES 1.4,Rails 5和Mongoid 6.我也是mongoid-elasticsearch宝石,我认为这种宝石并不相关,但包括它以防万一。&#39 ;我错了。
我有一个案例模型。当我运行此查询时,一切都运行良好,这是查询:
GET _search
{
"query":{
"filtered":{
"query":{
"query_string":{
"query":"behemoth"
}
}
}
}
}
这是结果,请注意organization_id:
hits": [
{
"_index": "cases",
"_type": "case",
"_id": "57d5e583a46100386987d7f4",
"_score": 0.13424811,
"_source": {
"basic info": {
"first name": "Joe",
"last name": "Smith",
"narrative": "behemoth"
},
"organization_id": {
"$oid": "57d4bc2fa461003841507f83"
},
"case_type_id": {
"$oid": "57d4bc7aa461002854f88441"
}
}
}
了解" $ oid"" $ oid"为了组织id?那是因为在我的as_indexed_json方法中,我有:
["organization_id"] = self.case_type.organization.id
我认为过滤器没有工作b / c Mongoid以某种方式添加了子键$ oid。所以我的下一个想法是,我只是把它变成一个字符串:
["organization_id"] = self.case_type.organization.id.to_s
但这会引发错误:
{"error":"MapperParsingException[object mapping for [case] tried to parse as object, but got EOF, has a concrete value been provided to it?]","status":400}
任何人都知道如何A)使用mongo id作为过滤器,或B)获取ES所需的信息,以便它不会像上面那样抱怨?
感谢您的帮助, 凯文
答案 0 :(得分:0)
原来这是因为已有一个现有的索引。当我修改索引并重新索引数据时,这很好用(ES的错误语法非常糟糕)。