es 吗 查询必须有sort_elasticsearch使用小结(ES使用小结)

本文档总结了在使用Elasticsearch过程中遇到的查询和排序问题。在默认情况下,查询结果按照_score排序,若需二次排序,可以使用sort功能。示例展示了如何在Java API和查询DSL中实现按_score和自定义字段排序。同时,文中还提及了如何在查询索引时指定返回的列。
摘要由CSDN通过智能技术生成

本文章总结自己在使用es过程中遇到的一些场景与解决办法。

1.查询结果排序

使用es进程query时,默认是按照_score排序的,当score同分时,同分结果顺序就不确定了(可能是按更新时间排序),如果要进行二次排序,就要用到sort功能了,话不多说,上代码:

POST /templatename/_search

{

"from" : 0,

"size" : 50,

"query": {

"match": {

"question" :"你说我的社保怎么交好呢?"}

},

"track_scores": true,

"sort": [

"_score",

{ "idx" : {"order" : "desc","unmapped_type" : "long"}}

]

}

这里score元素携带了排序信息,分别按_score和source中的idx元素排序,可以指定正序或逆序。unmapped_type不设置时,如果source中不包含idx元素,查询会返回错误信息,包含时,可以使用默认值填充,正序使用最大值,逆序使用最小值等。

使用了score元素默认不会计算最高分,携带track_scores元素可以继续计算最高分,一般没有这个必要。

下面看ja

Elasticsearch使用深度分页功能需要注意以下几点: 1. 尽量避免使用深度分页功能,因为它会增加网络和计算开销,可能导致性能问题。 2. 深度分页功能是通过设置 from 和 size 参数来实现的。from 参数表示从哪个位置开始查询,size 参数表示每页返回的文档数量。 3. Elasticsearch 默认最多只能返回 10000 条记录,如果需要查询更多的记录,需要设置 index.max_result_window 参数。但是设置太大会占用过多的内存,影响性能。 下面是一个 Java 实现 Elasticsearch 分页查询的示例代码: ``` import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.client.Client; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortOrder; public class ESQuery { private Client client; public ESQuery(Client client) { this.client = client; } public void search(String index, String type, int from, int size) { SearchResponse response = client.prepareSearch(index) .setTypes(type) .setQuery(QueryBuilders.matchAllQuery()) .addSort(SortBuilders.fieldSort("_id").order(SortOrder.DESC)) .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setFrom(from) .setSize(size) .execute() .actionGet(); SearchHits hits = response.getHits(); for (SearchHit hit : hits) { System.out.println(hit.getSourceAsString()); } } } ``` 调用示例: ``` ESQuery esQuery = new ESQuery(client); esQuery.search("my_index", "my_type", 0, 10); // 查询第一页,每页10条记录 esQuery.search("my_index", "my_type", 10, 10); // 查询第二页,每页10条记录,从第11条记录开始 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值