Jest 按名称排序结果

Jest sort results by name

我的 ElasticSearch 数据库中有一个 Person 索引,我通过这种方法获取了所有人员:

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());
}

但我想得到按名称字母顺序排序的结果(person 有 String id 和 String name)但我不知道如何。 感谢任何帮助

嗯。

我拿了ES给的list,用Collections排序的方式排序

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

问题可能是 ElasticSearch 将名称拆分为单词,然后它可以对任何单词进行排序。这可以给出一些非常随机的结果(例如,名称 "Zachary A. Zincstein" 会很明显,因为它包含一个 "A")。

一个解决方案是拥有第二个字段,您可以在映射中设置类型 keyword,然后对其进行排序。