Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting ElasticSearch 5.x文本字段排序问题_Sorting_Search_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Types_Mapping - Fatal编程技术网 elasticsearch,types,mapping,Sorting,Search,elasticsearch,Types,Mapping" /> elasticsearch,types,mapping,Sorting,Search,elasticsearch,Types,Mapping" />

Sorting ElasticSearch 5.x文本字段排序问题

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

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

"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将抛出 使用无法识别的类型时出现异常


你能解决这个问题吗?我面临着一个类似的问题:(看看下面的答案,看看它是否有助于你的案例。