"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [name] in order to

 我的代码

@Test
    public void searchName(){
        SearchRequest request = new SearchRequest();
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        searchSourceBuilder.query(QueryBuilders.matchAllQuery());//查询所有

        searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
        searchSourceBuilder.from(0);//默认0
        searchSourceBuilder.size(1);//默认10 一次检索多少个结果

//        排序
        searchSourceBuilder.sort(new ScoreSortBuilder().order(SortOrder.DESC));
        searchSourceBuilder.sort(new FieldSortBuilder("name").order(SortOrder.ASC));

        request.indices("customer");
        request.source(searchSourceBuilder);
        //滚动查询 大数据时使用
        request.scroll(TimeValue.timeValueMinutes(1L));//设置滚动间隔
        try {
            System.out.println(request.source().toString());
            SearchResponse response = client.search(request);

          String scrollId = response.getScrollId();//  读取返回的滚动ID,该滚动ID指向保持活动状态的搜索上下文,在下面的搜索滚动调用中将需要使用该滚动ID
            response.getHits().forEach(searchHits->{
                System.out.println(searchHits.getSourceAsString());
            });

            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 

 错误:

{
	"error": {
		"root_cause": [{
			"type": "illegal_argument_exception",
			"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [name] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
		}],
		"type": "search_phase_execution_exception",
		"reason": "all shards failed",
		"phase": "query",
		"grouped": true,
		"failed_shards": [{
			"shard": 0,
			"index": "customer",
			"node": "OVaxDvwtRveUofhQWfiGzw",
			"reason": {
				"type": "illegal_argument_exception",
				"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [name] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
			}
		}],
		"caused_by": {
			"type": "illegal_argument_exception",
			"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [name] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.",
			"caused_by": {
				"type": "illegal_argument_exception",
				"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [name] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
			}
		}
	},
	"status": 400
}

 

参考:https://elasticsearch.cn/question/2050
索引中,字段不是数值型(integer、double、long)或者keyword,而是text类型的,在使用该字段进行查询、排序、聚合时候,就会出现Fielddata is disabled on text fields by default. 
解决办法:
1.把改字段的索引类型改成keyword或者数值型
或者
2:索引字段类型还是text,但是加mapping中fielddata=true。这种不推荐,因为这样加载时候,占用的内存

查看字段类型发现 name 的type为text,我对name进行了排序所以报错了

 

解决问题:

将下面对name字段的排序删除

searchSourceBuilder.sort(new FieldSortBuilder("name").order(SortOrder.ASC));

查看字段类型

 C:\Users\41997>curl -XGET "localhost:9200/customer/_mapping/" 


{
	"customer": {
		"mappings": {
			"external": {
				"properties": {
					"name": {
						"type": "text",
						"fields": {
							"keyword": {
								"type": "keyword",
								"ignore_above": 256
							}
						}
					}
				}
			}
		}
	}
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值