2015-11-04 74 views
2

我試圖使用tire寶石等值與elasticsearch-rails寶石的Item模型轉換的映射:如何建立與elasticsearch護欄映射路由

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中聲明映射。不幸的是,關於這應該看起來沒有太多文檔......任何人都有想法?

回答

0

我不知道誰低估了這個問題,但我認爲這是一個完全有用的問題。

原來,當你不需要path這個。實際上你可以像這樣設置路由部分:

_routing: {type: 'user', required: 'true'}) 

我希望這有助於某人。

對於那些低估了這個問題的人:也許而不是讓這個社區沒有理由不接受,增加一個評論來解釋爲什麼這個問題是不好的。