Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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
Java 按名称对结果进行排序_Java_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Elasticsearch Jest - Fatal编程技术网 elasticsearch,elasticsearch-jest,Java,elasticsearch,Elasticsearch Jest" /> elasticsearch,elasticsearch-jest,Java,elasticsearch,Elasticsearch Jest" />

Java 按名称对结果进行排序

Java 按名称对结果进行排序,java,elasticsearch,elasticsearch-jest,Java,elasticsearch,Elasticsearch Jest,我的ElasticSearch数据库中有一个个人索引。我通过此方法获取所有的人: public List<Person> findAll() { SearchResult result = null; SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.matchAllQuery());

我的ElasticSearch数据库中有一个个人索引。我通过此方法获取所有的人:

public List<Person> findAll() {
    SearchResult result = null;
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(QueryBuilders.matchAllQuery());
    Search search = new Search.Builder(searchSourceBuilder.toString()).addIndex(PERSON_INDEX_NAME)
            .addType(PERSON_TYPE_NAME).build();
    try {
        result = client.execute(search);
    } catch (IOException e) {
    }
    List<SearchResult.Hit<Person, Void>> hits = result.getHits(Person.class);
    return hits.stream().map(this::getPerson).collect(Collectors.toList());
}
公共列表findAll(){
SearchResult=null;
SearchSourceBuilder SearchSourceBuilder=新的SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
Search Search=new Search.Builder(searchSourceBuilder.toString()).addIndex(人名)
.addType(PERSON_TYPE_NAME).build();
试一试{
结果=client.execute(搜索);
}捕获(IOE异常){
}
List hits=result.getHits(Person.class);
返回hits.stream().map(this::getPerson.collect(Collectors.toList());
}
但是我想按姓名的字母顺序对结果进行排序(person有字符串id和字符串名称),但我不知道如何进行排序。 非常感谢您的帮助


我获取了ES给出的列表,并使用集合排序方法对其排序

您的姓名字段是什么类型的

问题可能在于ElasticSearch将名称拆分为多个单词,然后它可以对任何单词进行排序。这可能会产生一些非常随机的结果(例如,“Zachary A.Zincstein”这个名字会出现得很高,因为它包含一个“A”)


一个解决方案是使用第二个字段,在映射中设置type
关键字
,并对其进行排序。

这个答案可能会有所帮助:另一个问题(我刚才注意到它也是我的xDDD)有效,因为长Id,这种按名称(字符串)排序不起作用:cAnd您不能按名称排序,因为您的名称字段已被分析,对吗?您可能需要创建名称字段的另一个子字段来进行排序。这不会正确排序您的结果,但只能对您从ES收到的前十个结果进行排序?为什么只返回前十个?因为查询中没有大小,默认情况下ES只返回按分数排序的前十个结果。你需要做一些阅读:;-)感谢您的回答,我完成了该项目的工作,并被转移到另一个项目,如果我没记错的话,我们将数据库中的字段更改为“未分析”,以使ES返回已排序的值。