Запросы Javascript на Elasticsearch не работают на дочерних элементах - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь отобразить результаты поиска в базе данных эластичного поиска в моем приложении activjs.Тем не менее, я могу получить доступ только к верхнему слою пар «ключ-значение» и не могу связаться с дочерними элементами.

Структура моих эластичных объектов поиска выглядит следующим образом:

...
"hits":[{
"_index":"knowledgecrawler",
"_type":"doc",
"_id":"5fea73f38399f4c01f",
"_score":1.0,
"_source":{
        "content":"content comes here",
        "meta":{
                "author":"Jones@stackoverflow.com",
                "title":"I am lost"
                "date":"today",
                "keywords":["Stackoverflow"],
                "language":"Javascript",
                }
        "raw":{
                "date":"2017-03-08",
                "subject":"How do I get here?"
                }
        }}]

эластичный объект поискагораздо больше, но я ищу только в «хитах».С помощью следующих строк кода я могу легко отобразить значения первого уровня (_index, _type, _id), но любая попытка доступа к дочерним элементам до сих пор не удалась:

render() {
    const result = this.props.result;
        return (
            <div className={this.props.bemBlocks.item().mix(this.props.bemBlocks.container("item"))} key={result._id}>
                <div className={this.props.bemBlocks.item("title")}>{result._id}</div>
                <div className={this.props.bemBlocks.item("title")}>{result._type}</div>
            </div>
        )
    }

Может кто-нибудь посоветовать мне, как получить доступ к дочерним элементам_source.Например, я хочу отобразить автора в своем веб-интерфейсе.

РЕДАКТИРОВАТЬ:

Таким образом, ошибка, по-видимому, связана с тем, что поле _source в Elasticsearch непроиндексированы и, следовательно, не доступны для поиска (в соответствии с документами эластичного поиска ).
Я пока не нашел решения, но опубликую его здесь, когда найду.Помощь также высоко ценится.

1 Ответ

0 голосов
/ 22 ноября 2018

Допустим, у вас есть следующие данные:

data = {"hits":[{
"_index":"knowledgecrawler",
"_type":"doc",
"_id":"5fea73f38399f4c01f",
"_score":1.0,
"_source":{
        "content":"content comes here",
        "meta":{
                "author":"Jones@stackoverflow.com",
                "title":"I am lost"
                "date":"today",
                "keywords":["Stackoverflow"],
                "language":"Javascript",
                }
        "raw":{
                "date":"2017-03-08",
                "subject":"How do I get here?"
                }
        }}]}

Теперь у вас вопрос: Может кто-нибудь посоветовать мне, как получить доступ к дочерним элементам _source.Например, я хочу отобразить автора в своем веб-интерфейсе.

Итак, вы можете сделать следующее, чтобы получить author из _source:

{data.hits && data.hits.length > 0 && data.hits[0]._source && data.hits[0]._source.meta && data.hits[0]._source.meta.author ?data.hits[0]._source.meta.author : ''}

Если у вас естьнесколько попаданий, тогда вы можете использовать array.map () следующим образом:

data.hits.map(value => value._source && value._source.meta && value._source.meta.author ? value._source.meta.author : '')
...