【发布时间】:2017-01-09 02:23:03
【问题描述】:
我了解这是一项新更改,但我看不出此映射有什么问题。这是通过 _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"
}
}
}
顺便说一句,我认为关键字字段是自动生成的,因为我什至没有在我的映射中定义它。
【问题讨论】:
-
你能解决这个问题吗?我面临着类似的问题:(
-
看看下面的答案,看看它是否对您的情况有帮助。
标签: sorting search elasticsearch types mapping