我的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
的类型,然后对其进行排序。