Sorting ElasticSearch 5.x文本字段排序问题
我知道这是一个新的变化,但我看不出这个映射有什么问题。这是通过_mapping调用从ElasticSearch中注册的字段映射中获取的:Sorting ElasticSearch 5.x文本字段排序问题,sorting,search,
elasticsearch,types,mapping,Sorting,Search,
elasticsearch,Types,Mapping,我知道这是一个新的变化,但我看不出这个映射有什么问题。这是通过_mapping调用从ElasticSearch中注册的字段映射中获取的: "key": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } 当我使用“key”字段进行排序时,我得到了这个异常。我还尝试添加f
"key": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
当我使用“key”字段进行排序时,我得到了这个异常。我还尝试添加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的新手,文档本身存在矛盾,所以我希望有人能给我指出正确的方向。这就是我所说的:
我基本上是在尝试实现与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"
}
}
}
}
}
]
}
}
}
以下是我在ElasticSearch论坛上从Lee Hinman那里得到的解释
如果索引一个没有映射的字符串,那么5.0+中的ES现在会自动生成
创建的文本版本和关键字版本(在.keyword下)
场
这实际上是相当混乱的一些匹配映射类型不理解值“text”
这里有一个断开连接,用于
match_mapping_type是字段的类型,不一定是ES
类型。例如,match_mapping_type只支持“long”,而不支持“long”
“整数”,因为它映射到数据类型而不是ES类型。所以
即使ES本身使用“文本”和“关键字”,数据类型也是
仍然是一条“线”
我同意这是令人困惑的,这里有一个公共关系:
对于5.0+来说,这增加了
对此的弃用日志记录,我打开了
因此,6.0将抛出
使用无法识别的类型时出现异常
你能解决这个问题吗?我面临着一个类似的问题:(看看下面的答案,看看它是否有助于你的案例。