弹性搜索mongoid过滤on_many ids

时间:2016-09-13 11:41:12

标签: ruby-on-rails elasticsearch mongoid

我使用的是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所需的信息,以便它不会像上面那样抱怨?

感谢您的帮助, 凯文

1 个答案:

答案 0 :(得分:0)

原来这是因为已有一个现有的索引。当我修改索引并重新索引数据时,这很好用(ES的错误语法非常糟糕)。