0

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

但我想按名称按字母顺序排序结果(有字符串ID和字符串名称),但我不知道如何。感谢任何帮助

4

2 回答 2

1

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

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

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

于 2017-04-24T10:41:39.827 回答
0

出色地。

我拿了 ES 给出的列表并使用 Collections 排序方法对其进行排序

于 2017-02-22T18:48:25.400 回答