Elasticsearch:将映射字段类型ID从long更新为字符串

时间:2015-04-22 13:35:11

标签: indexing elasticsearch mapping filtering

我从:

更改了elasticsearch mapping字段类型
    "articles": {
        "properties": {
          "id": {
              "type": "long"
          }}}

     "articles": {
        "properties": {
           "id": {
              "type": "string",
              "index": "not_analyzed"
           }

之后我做了以下步骤:

  1. 使用新映射创建索引
  2. 将映射重新索引到新索引
  3. 映射更新后,我之前的查询过滤器不再起作用,我没有结果:

    GET /art/_search
    {
        "query": {
        "filtered": {
             "query": {
            "match_all": {}
            },
             "filter": {
                "bool": {
                   "must": [
                          {
                          "type": {
                          "value": "articles"
                         }
                      },
                      {
                          "term": {
                          "id": "123467679"
                         }
                      }
                   ]
                }
             }
          }
       },
       "size": 1,
       "sort": [
          {
              "_score": "desc"
          }
       ]
    }
    

    如果我查看此查询,结果就是我的期望:

    GET /art/articles/_search
    {
      "query": {
        "match_all": {}
      }
    }
    

    如果有人知道为什么在字段类型更改后查询不再有效,我将不胜感激。

    谢谢!

1 个答案:

答案 0 :(得分:1)

查询中的问题是使用ID过滤器。 该查询可以正常更改过滤器:

"term": {
         "id": "123467679"
        }

在:

"term": {
         "_id": "123467679"
        }

我仍然是弹性搜索的初学者,以找出为什么映射更改打破了查询,尽管我做了重新索引,但是" _id"修复了我的问题。

您可以在以下位置找到更多信息: elasticsearch mapping reference documentation