Gan*_*han 5 postgresql ruby-on-rails elasticsearch elasticsearch-model elasticsearch-rails
我是 elasticsearch 的初学者,我想为我拥有的 jsonb 字段内的字段添加索引。这不是嵌套关系。
我的表有效负载包含字段id(整数)、user_id(整数)、data(jsonb)。
示例 jsonb 值如下:
{"name" => "Test User", "values" => {"age" => 24, "gender" => "male"}, "married": false}
Run Code Online (Sandbox Code Playgroud)
我想在“数据”(jsonb 列)的“值”部分内添加“性别”字段的索引。
数据库是postgres。
我添加了索引配置如下:
mappings do
indexes :id, type: 'integer'
indexes :user_id, type: 'integer'
indexes :data do
indexes :gender
end
end
Run Code Online (Sandbox Code Playgroud)
这是正确的吗?
我得到了查询的准确结果,
{"query": {
"term": {
"user_id": 1
}
}}
Run Code Online (Sandbox Code Playgroud)
但不适用于此查询
{"query": {
"term": {
"gender": "male"
}
}}
Run Code Online (Sandbox Code Playgroud)
提前致谢 !!!
我使用nestedtype 来定义 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
Run Code Online (Sandbox Code Playgroud)
请阅读此处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
Run Code Online (Sandbox Code Playgroud)