es数组内容排序;脚本排序

这篇具有很好参考价值的文章主要介绍了es数组内容排序;脚本排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求概述

在已经的查询条件中,需要按照返回结果内容中的一个字段内容倒序排序,一般单个字段的话直接addSort然后排序就ok了。但是我的目标字段是一个数组,需要按照查询内容在字段中是否出现倒序排序。

思路:

  1. 直接将复核条件的数据的score翻倍,按照score排序。(我采用的这种)
  2. 利用sort中的missing _last,将doc中没有这个属性的数据放到最后,有的放到最前。(这个看具体需求)
  3. 使用脚本自定义。(理论上可以,但是未实现)

sort missing _last实现

这里我使用的是6.3的es,目标字段categories是数组
es数组内容排序;脚本排序

先在kibana中使用rest api查询,是否和结果一致

es数组内容排序;脚本排序

使用java api实现

SearchRequestBuilder resultRequestBuilder = createRequestBuliderByESIndex(SHOP_INDEX,searchParam.getPageSize(),searchParam.getPageNo());
BoolQueryBuilder finalQueryBuilders = QueryBuilders.boolQuery();
 .
 .
 .

finalQueryBuilders.should(QueryBuilders.termQuery("categories",searchParam.getCategoryId()));
FieldSortBuilder categorySort = SortBuilders.fieldSort("categories");
categorySort.missing("_last");
resultRequestBuilder.addSort(categorySort);

另外在Stack Overflow中查询到还可以用script脚本实现更加复杂的排序,附上链接

https://stackoverflow.com/questions/47295552/elasticsearch-sorting-by-array-column文章来源地址https://www.toymoban.com/news/detail-507153.html

POST my_index/my_type/_search
{
      "sort" : {
        "_script" : {
            "script" : "String s = ''; for(int i = 0; i < params._source.my_array.length; ++i) {s += params._source.my_array[i] + ','}  s",
            "type" : "string",
            "order" : "asc"
        }
    }
}

增加score实现

SearchRequestBuilder resultRequestBuilder = createRequestBuliderByESIndex(SHOP_INDEX, searchParam.getPageSize(), searchParam.getPageNo());
BoolQueryBuilder finalQueryBuilders = QueryBuilders.boolQuery();
。
。
。
if(StringUtils.isNotBlank(searchParam.getPackageId())){
    finalQueryBuilders.should(QueryBuilders.termQuery("lightUpPackageIds", searchParam.getPackageId()).boost(10f));
}
。
。
。

到了这里,关于es数组内容排序;脚本排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch如何使用以及java代码如何查询并排序ES中的数据(距离排序)

    import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.geo.GeoDistance; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.common.unit.DistanceUnit; import org.elasticsearch.common.unit.

    2024年04月12日
    浏览(38)
  • es查询nested字段类型数组长度来判断是否包含多个值

    使用es时经常会碰到查询数组格式的字段是否有多个值的情况,总结一下。 一、字段类型为keywork时 当字段类型为keyword时(创建索引后,添加的第一条数据id字段格式为数组格式,便会导致后续的数据都是数组),查询id字段有多值时用以下查询语句: 二、字段类型为nested类型时

    2024年02月11日
    浏览(42)
  • 太强了!利用 Python 连接 ES 查询索引某个字段命中数的脚本!

    当我们在工作中,如果频繁查询 Elasticsearch 某个索引中的某个字段命中的记录数量时,可以通过 Python 的 Elasticsearch 库来查询,从而提升工作效率。 代码大致思路如下: 第一步 :从 elasticsearch 模块导入 Elasticsearch 类,该类是用来连接和操作 Elasticsearch 第二步 :安装 Elastics

    2024年02月03日
    浏览(37)
  • Java查询es数据,根据指定id检索(in查询),sql权限过滤,多字段匹配检索,数据排序

    Java集成Elasticsearch,进行索引数据查询,并进行sql权限过滤,指定id检索(in查询),多字段匹配检索,数据排序。由于权限过滤是根据sql语句判断当前用户或其部门可查询的数据,所以采用以下方法: 1.通过sql过滤出当前用户可查询的数据id集合idsList; 2.将当前用户可查询的

    2024年02月22日
    浏览(54)
  • 当es使用script脚本查询聚合等操作遇到空字段报错问题解决方案

            在使用ES的脚本时,如果脚本中引用了不存在或者空的字段,则会导致脚本执行失败并抛出错误。这是因为ES会在脚本执行之前尝试检索引用的字段,如果该字段不存在则会抛出异常。         因此,在使用ES脚本时,需要确保所引用的字段都存在且不为空。可

    2024年02月11日
    浏览(40)
  • ES查询时报错内容过大: entity content is too long for the configured buffer limit

    问题: ES查询时报错内容过大: java.io.IOException: entity content is too long [107162543] for the configured buffer limit [104857600] [ElasticSearch] [ERROR] 问题: ES查询时报错 entity content is too long for the configured buffer limit 原因: 单次查询内容大小太大 解决: 设置ES查询内容限制HeapBufferedResponseConsumerFactory

    2024年02月11日
    浏览(33)
  • 【虹科干货】逻辑数据库可能已经无法满足需求了!

    不可否认,单个Redis实例已经不能满足实际生产中的需求了。为了解决由此带来的问题,何不试试用专用实例代替逻辑数据库呢? 一、逻辑数据库可能已经无法满足需求的4个迹象 1.您有个“吵闹的邻居” PS:“吵闹的邻居”指同一个Redis OSS实例中其它繁忙的逻辑数据库。

    2024年02月07日
    浏览(44)
  • AIGC时代已经到来,如何满足其日益增长的算力需求

    2023年是AI人工智能技术全面爆红的一年。以ChatGPT、GPT-4、文心一言为代表的AIGC大模型,集文本撰写、代码开发、诗词创作等功能于一体,展现出了超强的内容生产能力,带给人们极大震撼。 AIGC,AI-Generated Content(人工智能生产内容)到底是什么?到底是一张怎样的强大网络

    2024年02月11日
    浏览(60)
  • SpringDataElasticsearch查询ES进行排序时报错Fielddata is disabled on text fields by default. Set fielddata=tru

    版本: ES:6.8.3 使用 spring-data-elasticsearch 操作es增删改查,进行排序操作的时候出现了一下报错: 出现这个报错的原因是由于我在查询后对text类型的字段进行了排序操作。 通过 GET /索引名/_mapping 查看索引的mapping映射,发现该排序的字段类型是 text 类型,而text类型的字段是

    2024年02月16日
    浏览(30)
  • 【产品规划】功能需求说明书概述

    2024年02月12日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包