我的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
答案 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排序方法
命令它