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

但我想得到按名称按字母顺序排序的结果(具有字符串ID和字符串名称),但我不知道如何。
任何帮助都感激不尽

最佳答案

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

问题可能是ElasticSearch将名称分成单词,然后可以对任何单词进行排序。这样可以给出一些相当随机的结果(例如,名称“Zachary A. Zincstein”会非常流行,因为它包含“A”)。

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

10-07 19:11
查看更多