gpt4 book ai didi

使用 Java API 进行 Elasticsearch 排序

转载 作者:行者123 更新时间:2023-12-02 22:45:54 25 4
gpt4 key购买 nike

我正在尝试根据 totalEmployee 字段对我的文档进行排序,其中索引是 index_db , 类型为 部门一个字段是 员工总数

QueryBuilder qb = QueryBuilders.matchAllQuery();
SearchResponse response = client.prepareSearch("index_db").setTypes("departments")
.addSort(SortBuilders.fieldSort("totalEmployee").order(SortOrder.ASC)).setQuery(qb)
.setSize(100).execute().actionGet();
for(SearchHit hits :response.getHits()) {
System.out.print("id = "+hits.getId());
System.out.println(hits.getSourceAsString());
}

但我收到错误:
Exception in thread "main" Failed to execute phase [query], all shards failed; shardFailures {[q9B7Qs-DSXWC14pjc5zlNg][index_db][0]: RemoteTransportException[[elasticsearch_node][10.64.216.92:9375][indices:data/read/search[phase/query]]]; nested: IllegalArgumentException[Fielddata is disabled on text fields by default. Set fielddata=true on [totalEmployee] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.]; }{[q9B7Qs-DSXWC14pjc5zlNg][index_db][1]: RemoteTransportException[[elasticsearch_node][10.64.216.92:9375][indices:data/read/search[phase/query]]]; nested: IllegalArgumentException[Fielddata is disabled on text fields by default. Set fielddata=true on [totalEmployee] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.]; }{[q9B7Qs-DSXWC14pjc5zlNg][piyush_db][2]: RemoteTransportException[[elasticsearch_node][10.64.216.92:9375][indices:data/read/search[phase/query]]]; nested: IllegalArgumentException[Fielddata is disabled on text fields by default. Set fielddata=true on [totalEmployee] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.]; }{[q9B7Qs-DSXWC14pjc5zlNg][piyush_db][3]: RemoteTransportException[[elasticsearch_node][10.64.216.92:9375][indices:data/read/search[phase/query]]]; nested: IllegalArgumentException[Fielddata is disabled on text fields by default. Set fielddata=true on [totalEmployee] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.]; }{[q9B7Qs-DSXWC14pjc5zlNg][piyush_db][4]: RemoteTransportException[[elasticsearch_node][10.64.216.92:9375][indices:data/read/search[phase/query]]]; nested: IllegalArgumentException[Fielddata is disabled on text fields by default. Set fielddata=true on [totalEmployee] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.]; }

最佳答案

由于 totalEmployee 是分析字段,因此弹性要求字段数据值为 true 以执行排序操作。相反,您可以使用 totalEmployee.keyword 来实现所需的结果。

下面是工作代码。

QueryBuilder qb = QueryBuilders.matchAllQuery();

SearchResponse response = client.prepareSearch("index_db").setTypes("departments")
.addSort(SortBuilders.fieldSort("totalEmployee.keyword")
.order(SortOrder.ASC)).setQuery(qb)
.setSize(100).execute().actionGet();

for(SearchHit hits : response.getHits())
{
System.out.print("id = " + hits.getId());
System.out.println(hits.getSourceAsString());
}

关于使用 Java API 进行 Elasticsearch 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52380110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com