如何使用elasticsearch在映射中设置路由-rails
How to set up routing in mapping with elasticsearch-rails
我正在尝试将使用 tire
gem 的 Item
模型的此映射转换为 elasticsearch-rails
gem 的等效映射:
tire do
mapping(
_parent: { type: 'player' },
_routing: { required: true, path: :user }
) do
indexes :user, type: "string", index: :not_analyzed
end
我在 elasticsearch-rails
中的映射是:
mapping(_parent: {type: 'player', require: 'true', _routing: {path: 'user', required: 'true'}}) do
indexes :user, type: "string", index: not_analyzed
end
这似乎没问题,直到我尝试导入一些玩家:
transform_function = lambda do |item|
{
index: {
_id: item.id,
_parent: item.player_id,
_routing: item.user_id,
data: item.__elasticsearch__.as_indexed_json
}
}
Item.__elasticsearch__.import \
index: 'my_index',
batch_size: 100,
transform: transform_function
我在尝试导入内容时遇到错误:
Elasticsearch::Transport::Transport::Errors::BadRequest: [400]
{
"error" : "MapperParsingException[The provided routing value [1] doesn't match the routing key stored in the document: [null]]",
"status":400
}
我不知道那个错误是什么意思,而且我似乎无法在网上找到适用的解释。遇到此错误的其他人似乎在做一些不同的事情...
我认为这只是我在 elasticsearch-rails
中声明映射的方式的问题。不幸的是,没有太多关于它应该是什么样子的文档......有人有想法吗?
我不知道是谁否决了这个问题,但我认为这是一个非常有用的问题。
事实证明,当您不需要 path
时。您实际上可以像这样设置路由部分:
_routing: {type: 'user', required: 'true'})
我希望这对某人有所帮助。
致对这个问题投反对票的人:与其无缘无故地让这个社区变得不受欢迎,不如添加一条评论来解释为什么这个问题不好。
我正在尝试将使用 tire
gem 的 Item
模型的此映射转换为 elasticsearch-rails
gem 的等效映射:
tire do
mapping(
_parent: { type: 'player' },
_routing: { required: true, path: :user }
) do
indexes :user, type: "string", index: :not_analyzed
end
我在 elasticsearch-rails
中的映射是:
mapping(_parent: {type: 'player', require: 'true', _routing: {path: 'user', required: 'true'}}) do
indexes :user, type: "string", index: not_analyzed
end
这似乎没问题,直到我尝试导入一些玩家:
transform_function = lambda do |item|
{
index: {
_id: item.id,
_parent: item.player_id,
_routing: item.user_id,
data: item.__elasticsearch__.as_indexed_json
}
}
Item.__elasticsearch__.import \
index: 'my_index',
batch_size: 100,
transform: transform_function
我在尝试导入内容时遇到错误:
Elasticsearch::Transport::Transport::Errors::BadRequest: [400]
{
"error" : "MapperParsingException[The provided routing value [1] doesn't match the routing key stored in the document: [null]]",
"status":400
}
我不知道那个错误是什么意思,而且我似乎无法在网上找到适用的解释。遇到此错误的其他人似乎在做一些不同的事情...
我认为这只是我在 elasticsearch-rails
中声明映射的方式的问题。不幸的是,没有太多关于它应该是什么样子的文档......有人有想法吗?
我不知道是谁否决了这个问题,但我认为这是一个非常有用的问题。
事实证明,当您不需要 path
时。您实际上可以像这样设置路由部分:
_routing: {type: 'user', required: 'true'})
我希望这对某人有所帮助。
致对这个问题投反对票的人:与其无缘无故地让这个社区变得不受欢迎,不如添加一条评论来解释为什么这个问题不好。