2017-02-01 4 views
1

Я пытаюсь обновить свой старый кластер Elasticsearch до Elasticsearch 5.0.Как обойти полезную нагрузку в Elasticsearch 5.0

Я заметил, что они удалили payload с Elasticsearch 5.0, и это мешает мне успешно обновлять Elasticsearch.

Я понял, что payload много раз появляется в моем коде. Ниже приведены мои фрагменты кода, которые включают payload.

elasticClient.index({ 
    index: "users", 
    type: "user", 
    id: username, 
    body: { 
    name_suggest: { 
     input: displayname 
     payload: { "user_id": username } 
    } 
    } 
}, function(error) { 
    console.log(error); 
}); 

Я использую React.js (JSX) и Express.js, чтобы показать результаты поиска в следующем фрагменте кода.

return (
    <ul id="searchValue" key="wow"> 
    {result.options[0] ? <a href={"users/" + result.options[0].payload.user_id}><li style={{display: this.state.searchResults}} key={ result.options[0].payload.user_id }>{ result.options[0].text}</li></a> : null} 
    {result.options[1] ? <a href={"users/" + result.options[1].payload.user_id}><li style={{display: this.state.searchResults}} key={ result.options[1].payload.user_id }>{ result.options[1].text}</li></a> : null} 
    {result.options[2] ? <a href={"users/" + result.options[2].payload.user_id}><li style={{display: this.state.searchResults}} key={ result.options[2].payload.user_id}>{ result.options[2].text}</li></a> : null} 
    {result.options[3] ? <a href={"users/" + result.options[3].payload.user_id}><li style={{display: this.state.searchResults}} key={ result.options[3].payload.user_id}>{ result.options[3].text}</li></a> : null} 
    {result.options[4] ? <a href={"users/" + result.options[4].payload.user_id}><li style={{display: this.state.searchResults}} key={ result.options[4].payload.user_id}>{ result.options[4].text}</li></a> : null} 
    </ul> 
) 

Как вы можете видеть, я использую payload много раз.

В Elasticsearch 5.0, как мне нужно обновить код, чтобы он работал без payload?

ответ

0

Я должен был удалить каждую строку с помощью payload и использовать вместо этого _source, как описано here.

Например:

return (
    <ul id="searchValue" key="wow"> 
    {result.options[0] ? <a href={"users/" + result.options[0]._source.name_suggest.input}><li style={{display: this.state.searchResults}} key={ result.options[0]._source.name_suggest.input}>{ result.options[0].text}</li></a> : null} 
    {result.options[1] ? <a href={"users/" + result.options[1]._source.name_suggest.input}><li style={{display: this.state.searchResults}} key={ result.options[1]._source.name_suggest.input}>{ result.options[1].text}</li></a> : null} 
    {result.options[2] ? <a href={"users/" + result.options[2]._source.name_suggest.input}><li style={{display: this.state.searchResults}} key={ result.options[2]._source.name_suggest.input}>{ result.options[2].text}</li></a> : null} 
    {result.options[3] ? <a href={"users/" + result.options[3]._source.name_suggest.input}><li style={{display: this.state.searchResults}} key={ result.options[3]._source.name_suggest.input}>{ result.options[3].text}</li></a> : null} 
    {result.options[4] ? <a href={"users/" + result.options[4]._source.name_suggest.input}><li style={{display: this.state.searchResults}} key={ result.options[4]._source.name_suggest.input}>{ result.options[4].text}</li></a> : null} 
    </ul> 
) 

Изменение payload.user_id в _source.name_suggest.input.

Я также удалил строку payload: { "user_id": username }, так как она не потребовалась в Elasticsearch 5.0.

Смежные вопросы