2

我是elasticsearch的初学者,我想为我在jsonb字段中的字段添加索引。这不是嵌套关系。 (整数)user_id(整数),data(jsonb)。在elasticsearch rails中为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" 
    } 
}} 

在此先感谢!

+0

看起来这一个可以帮助你在这里:http://michael.otacoo.com/postgresql-2/postgres-9-4-feature-highlight-indexing-jsonb/ –

+0

@TarynEast ..谢谢..我编辑了这个问题。我正在寻找在elasticsearch中添加索引。 –

回答

0

我用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 
相关问题