gpt4 book ai didi

elasticsearch - 检索Copy_to/Stored字段

转载 作者:行者123 更新时间:2023-12-03 01:25:24 24 4
gpt4 key购买 nike

我通过更改下面的映射创建了一个copy_to字段,与现有字段相同:

{
"properties": {
"ExistingField": {
"type": "date",
"copy_to": "CopiedField"
},
"CopiedField": {
"type": "date",
"store": true
}
}
}

我曾使用“store”:“true”,因为我希望在进行搜索时能检索到新的字段值。使用“CopiedField”进行聚合可以正常工作,但是当我尝试在此新的CopiedField中搜索值时,我看不到正在检索的任何内容:
{
"stored_fields": [
"CopiedField"
],
"query": {
"match_all": {}
}
}

如何通过简单的搜索检索“CopiedField”的值?

最佳答案

无法更改现有字段的映射。
您将需要创建一个新索引(具有正确的映射),并将文档从旧索引移到新索引。您可以删除旧索引并使用别名,以便不更改索引名称

  • (映射)[https://www.elastic.co/blog/changing-mapping-with-zero-downtime]
  • (重新索引)[https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html]
  • (别名)[https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-aliases.html]
    例如

  • 具有以下映射的旧索引index35
    PUT index35
    {
    "mappings": {
    "properties": {
    "ExistingField": {
    "type": "date"
    }
    }
    }
    }

    查询:以下查询将不返回任何内容
    GET index35/_search
    {
    "stored_fields": [
    "CopiedField"
    ],
    "query": {
    "match_all": {}
    }
    }

    建立新索引
    PUT index36
    {
    "mappings": {
    "properties": {
    "ExistingField": {
    "type": "date",
    "copy_to": "CopiedField"
    },
    "CopiedField": {
    "type": "date",
    "store": true
    }
    }
    }
    }

    将旧文件移至新文件
    POST _reindex
    {
    "source": {
    "index": "index35"
    },
    "dest": {
    "index": "index36" ----> must be created before reindex
    }
    }

    确保新旧索引中的文档计数相同(以防止数据丢失)

    删除旧索引:-DELETE index35

    为新索引(给旧名称)创建别名,以使搜索查询不受影响
    POST /_aliases
    {
    "actions" : [
    { "add" : { "index" : "index36", "alias" : "index35" } }
    ]
    }

    现在,旧查询将返回结果

    关于elasticsearch - 检索Copy_to/Stored字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58442373/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com