【问题标题】:adding index for an attribute of jsonb field in elasticsearch rails在elasticsearch rails中为jsonb字段的属性添加索引
【发布时间】:2016-11-08 04:25:15
【问题描述】:

我是 elasticsearch 的初学者,我想为我拥有的 jsonb 字段中的字段添加索引。这不是嵌套关系。

我的表有效负载包含字段id(整数),user_id(整数),data(jsonb)。

示例 jsonb 值如下:

{"name" => "Test User", "values" => {"age" => 24, "gender" => "male"}, "married": false}

我想为“数据”(jsonb 列)的“值”部分内的“性别”字段添加索引。

数据库是 postgres。

我已经添加了索引配置如下:

  mappings do
    indexes :id,      type: 'integer'
    indexes :user_id, type: 'integer'

    indexes :data do
      indexes :gender
    end
  end

这是对的吗?

我得到了准确的查询结果,

{"query": {
    "term": {
        "user_id": 1
    }
}}

但不适用于此查询

{"query": {
    "term": {
        "gender": "male"
    }
}}

提前致谢!!!

【问题讨论】:

  • 看起来这个可以帮助你:michael.otacoo.com/postgresql-2/…
  • @TarynEast .. 谢谢..我已经编辑了这个问题。我正在寻找在 elasticsearch 中添加索引。

标签: ruby-on-rails postgresql elasticsearch elasticsearch-rails elasticsearch-model


【解决方案1】:

我使用nested类型来定义jsonb对象:

  settings index: { number_of_shards: 1 } do
    mappings dynamic: 'false' do
      indexes :id, type: 'integer'
      indexes :user_id, type: 'integer'
      indexes :name, type: 'text'
      indexes :data, type: 'nested' do
        indexes :gender, type: 'text'
        indexes :age, type: 'integer'
      end
    end
  end

阅读此处https://www.elastic.co/guide/en/elasticsearch/reference/current/object.html,了解有关 JSON 文档的更多信息。

如果您在 JSONB 对象中有动态字段,那么您可以像这样定义索引:

  settings index: { number_of_shards: 1 } do
    mappings dynamic: 'false' do
      indexes :id, type: 'integer'
      indexes :user_id, type: 'integer'
      indexes :name, type: 'text'
      indexes :data, dynamic: 'true' do
      end
    end
  end

【讨论】:

    猜你喜欢
    • 2016-03-06
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多