【问题标题】:Empty fields aren't shown directly in Elasticsearch?Elasticsearch 中不直接显示空字段?
【发布时间】:2021-03-09 22:19:33
【问题描述】:

我使用Put Mapping API 添加了一个名为“title”的额外字段,然后尝试使用 GET index_name/type/_search 对我的索引进行正常搜索,但记录中没有显示任何带有“title”的字段。是因为该字段中没有内容吗?如果是这样,我如何获得没有内容的字段?

谢谢。

【问题讨论】:

    标签: elasticsearch elasticsearch-mapping


    【解决方案1】:

    如果您启用了_source,elasticsearch 将返回您发送给它的字段值(无论是否为空)。如下例所示。

    {
      "title" : "" // see empty value
    }
    

    并且此 doc-id 上的 GET API 返回以下响应

    {
        "_index": "newso",
        "_type": "_doc",
        "_id": "1",
        "_version": 2,
        "_seq_no": 1,
        "_primary_term": 1,
        "found": true,
        "_source": {
            "title": "" // same value is returned in response.
        }
    }
    

    编辑:- 基于@Val 评论,如果您希望在旧文档中找到这个新添加的 title 字段,而您没有索引此字段,您将无法要找到它,因为 elasticsearch 是无模式的,并且不强制您必须强制索引字段。您还可以添加/删除字段,而无需将映射更新为无模式。

    对于这个问题,即使你索引一个新文档,在映射中添加这个title字段后,并且不包含title字段,那么对于那个文档再次title字段将不会返回。

    【讨论】:

    • 我认为 OP 希望在所有现有文档中找到 title 字段,即使它在源代码中不存在。您应该只提一下,源永远不会被 ES 修改,并且会显示已发送的任何内容,而不是更多,而不是更少
    • @Val,我看到正在更新答案。
    • @ElasticsearchNinja 是的,我启用了_source,但title 字段未显示。此外,我已经索引了 100 个文档,之后我添加了 title 字段。
    • @GowthamMunukutla 在映射中添加新的title 字段不会将该字段添加到所有现有文档源。如果您想在源中查看该字段,则需要使用空标题字段重新索引文档。
    • 值得注意的是,update by query 也可以工作,而无需重新索引所有文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 2021-03-10
    • 2021-08-22
    相关资源
    最近更新 更多