Elasticsearch 如何为所有文本字段设置 fielddata: true

Čam*_*amo 4 database nosql elasticsearch

有人可以告诉我如何为所有文本字段设置 fielddata 为真。我需要根据它们进行排序,它会抛出一个错误Fielddata 默认情况下在文本字段上被禁用这里是一块映射,其中街道或城市是文本字段,它会引发我这个错误。

"address": {
                    "properties": {
                        "city": {
                            "type": "text",
                            "boost": 5,
                            "analyzer": "suggestion"
                        },
                        "zip": {
                            "type": "text"
                        },
                        "street": {
                            "type": "text",
                            "boost": 7,
                            "analyzer": "suggestion"
                        }
Run Code Online (Sandbox Code Playgroud)

Gau*_*lik 5

为此,您需要更新您的字段的映射,您可以使用 elasticsearch 的放置映射 API。

PUT yourindexName/_mapping/_doc
{
  "properties": {
     "yourfield": { 
       "type":     "text",
       "fielddata": true
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

尽管不建议在文本字段上启用 fielddata,因为它们会消耗大量堆空间。

我建议您通过此链接详细解释其背后的基本原理。弹性搜索字段数据

或者,您也可以为您的字段尝试以下映射:

 "yourfield": { 
    "type": "text",
    "fields": {
      "keyword": {
        "type": "keyword"
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

而不是纯文本...我希望它可以满足您的目的。

快乐编码:)