代码之家  ›  专栏  ›  技术社区  ›  Jones1220

Elasticsearch上的Javascript查询在子元素上不起作用

  •  1
  • Jones1220  · 技术社区  · 6 年前

    我正在尝试在我的reactjs应用程序中的elasticsearch数据库上显示搜索结果。然而,我只能访问键值对的上层,无法访问子级。

    ...
    "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?"
                    }
            }}]
    

    elasticsearch对象要大得多,但我只在“hits”中搜索。通过以下代码行,我可以轻松显示第一级值(_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 . 例如,我想在我的前端显示作者。

    编辑:

    所以这个错误显然是由于 _来源 Elasticsearch中的字段没有索引,因此不可搜索(根据 elasticsearch docs
    到目前为止,我还没有想出一个解决方案,但是当我找到它的时候,我会把它贴在这里。我们也非常感谢您的帮助。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Triyugi Narayan Mani Harendra Kumar    6 年前

    假设您有以下数据:

    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?"
                    }
            }}]}
    

    有谁能告诉我如何访问源代码的孩子吗。例如,我想在我的前端显示作者。

    因此,您可以执行以下操作以获得 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 : '')