Jest按名称排序结果

时间:2017-02-22 17:09:58

标签: java elasticsearch jest

我的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和字符串名称)按字母顺序排序结果,但我无法弄清楚如何。 任何帮助都是apreciated

2 个答案:

答案 0 :(得分:1)

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

问题可能是ElasticSearch将名称拆分为单词,然后它可以对任何单词进行排序。这可以给出一些非常随意的结果(例如名字&#34; Zachary A. Zincstein&#34;会高度出现,因为它包含一个&#34; A&#34;)。

解决方案是拥有第二个字段,在映射中设置类型class Todo has_many :completions class Project has_many :completions class Completion belongs_to :todo belongs_to :project ,然后对其进行排序。

答案 1 :(得分:0)

好。

我拿了ES给出的列表,并使用Collections排序方法

命令它