我知道这是一个新更改,但是我看不到此映射有什么问题。这是通过_mapping调用从ElasticSearch中注册的字段的映射中获取的:

"key": {
    "type": "text",
    "fields": {
        "keyword": {
            "type": "keyword",
            "ignore_above": 256
        }
    }
}

当我使用“键”字段进行排序时,出现此异常。我也尝试添加fieldData = true,但这也没有用。
Caused by: RemoteTransportException[[_6qwpaI][127.0.0.1:9300][indices:data/read/search[phase/query]]]; nested: IllegalArgumentException[Fielddata is disabled on text fields by default. Set fielddata=true on [key] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.];
Caused by: java.lang.IllegalArgumentException: Fielddata is disabled on text fields by default. Set fielddata=true on [key] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.
    at org.elasticsearch.index.mapper.TextFieldMapper$TextFieldType.fielddataBuilder(TextFieldMapper.java:335)
    at org.elasticsearch.index.fielddata.IndexFieldDataService.getForField(IndexFieldDataService.java:111)
    at org.elasticsearch.index.query.QueryShardContext.getForField(QueryShardContext.java:167)
    at org.elasticsearch.search.sort.FieldSortBuilder.build(FieldSortBuilder.java:281)
    at org.elasticsearch.search.sort.SortBuilder.buildSort(SortBuilder.java:151)
    at org.elasticsearch.search.SearchService.parseSource(SearchService.java:678)
    at org.elasticsearch.search.SearchService.createContext(SearchService.java:536)
    at org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:502)
    at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:243)
    at org.elasticsearch.action.search.SearchTransportService.lambda$registerRequestHandler$6(SearchTransportService.java:276)
    at org.elasticsearch.transport.TransportRequestHandler.messageReceived(TransportRequestHandler.java:33)
    at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:69)
    at org.elasticsearch.transport.TransportService$6.doRun(TransportService.java:550)
    at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:527)
    at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

起初我以为这可能与字段的使用有关(例如key.keyword),但是由于我没有这样做,所以我看不出任何不起作用的原因。

我是ElasticSearch 5.x的新手,文档本身矛盾,所以我希望有人可以指出正确的方向。我指的是:

https://www.elastic.co/guide/en/elasticsearch/reference/current/fielddata.html

我实质上是在尝试实现与一直到5.x都可以使用的原始映射相同的功能:
"mapping": {
    "type": "string",
    "fields": {
        "raw": {
            "type": "string",
            "ignore_above": 256
        },
        "english": {
            "type": "string",
            "analyzer": "english"
        }
    }
}

顺便说一句,我认为关键字字段是自动生成的,因为我什至没有在映射中定义它。

最佳答案

使用此设置代替5.x。 “关键字”是未分析字符串的新类型。

{
   "mappings": {
     "doc": {
       "dynamic_templates": [
         {
           "strings": {
             "match_mapping_type": "string",
             "mapping": {
               "type": "text",
               "fields": {
                 "raw": {
                   "type": "keyword",
                   "ignore_above": 256
                 },
                 "english": {
                   "type": "text",
                   "analyzer": "english"
                 }
               }
             }
           }
         }
       ]
     }
   }
 }

这是我从Lee Hinman在ElasticSearch论坛中获得的解释。



这实际上是相当混乱的,有些match_mapping_type无法理解“文本”值。

09-10 11:04
查看更多