ElasticSearch-已将索引字段升级为多字段-新字段为空



注意到我对索引字符串字段的排序无法正常工作,我发现它对已分析的字符串进行排序,所以"单词袋",如果我想让它正常工作,就必须对未分析的字符串排序。我的计划是使用我在这两篇文章中找到的信息,将字符串字段更改为多字段:

https://www.elastic.co/blog/changing-mapping-with-zero-downtime(升级为多字段部分)https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html

使用Sense我创建了这个字段映射

PUT myindex/_mapping/type
{
   "properties": {
      "Title": {
         "type": "string",
         "fields": {
            "Raw": {
               "type": "string",
               "index": "not_analyzed"
            }
         }
      }
   }
}

然后我尝试使用新创建的字段对搜索结果进行排序。在阅读了这些文章后,我已经列出了我能想到的所有名称变体:

POST myindex/_search
{
    "_source" : ["Title","titlemap.Raw","titlemap.Title","titlemap.Title.Raw","Title.Title","Raw","Title.Raw"],
    "size": 6,
    "query": {
        "multi_match": {
            "query": "title",
            "fields": ["Title^5"
            ],
            "fuzziness": "auto",
            "type": "best_fields"
        }
    },
    "sort": {
        "Title.Raw": "asc"
    }
}

这就是我得到的回应:

{
    "_index": "myindex_2015_11_26_12_22_38",
    "_type": "type",
    "_id": "1205",
    "_score": null,
    "_source": {
       "Title": "The title of the item"
    },
    "sort": [
       null
    ]
 }

响应中只显示Title字段的值,并且每个结果的排序标准都为null。

我做错了什么吗,或者有其他方法可以做吗?

重新索引后,索引名称不相同,因此安装了默认映射。。。这可能就是为什么。

我建议使用索引模板,这样你就不必关心何时创建索引,ES会为你做这件事。其想法是创建一个具有所需正确映射的模板,然后ES将在其认为必要时创建每个新索引,添加myindex别名并对其应用正确映射。

curl -XPUT localhost:9200/_template/myindex_template -d '{
  "template": "myindex_*",
  "settings": {
    "number_of_shards": 1
  },
  "aliases": {
     "myindex": {}
  },
  "mappings": {
    "type": {
      "properties": {
        "Title": {
          "type": "string",
          "fields": {
            "Raw": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        }
      }
    }
  }
}'

然后,每当您启动重新索引过程时,都会创建一个具有新名称的新索引,但要使用正确的映射和正确的别名。

相关内容

  • 没有找到相关文章