ES中问题

1 使用精确查询

使用QueryBuilders.termQuery()查询时,字段的数据类型可以是keyword,也可以是text但必须指定分词策略(例如:“ik_max_word"),注意这有坑。

例如,(1)在ES中使用QueryBuilders.termQuery("name", "雷锋网")搜索字段name中含有“雷锋网”的数据;

如果name字段的数据类型是"keyword",能够搜索出”雷锋网“数据;

如果name字段的数据类型是“text”,不能搜出”雷锋网“数据;

 

(2)在ES中使用QueryBuilders.termQuery("name", "雷锋")搜索字段name的内容;

如果name字段的数据类型是"keyword",不能够搜索出”雷锋网“数据;

如果name字段的数据类型是“text”,能搜出”雷锋网“数据;

因为keyword类型不分词,ES搜索的时候能够精确匹配到“雷锋网”;但是text类型,字段的内容会被分词为“雷锋”和“网”,则精确匹配无法找到“雷锋网”

 

2 ES中的sort排序

ES中使用searchSourceBuilder.sort("name", SortOrder.DESC)时,如果name字段是text类型必须开启 fielddata,而keyword可以直接用来排序,数值类型、日期类型的也可以直接排序。如果使用sort排序默认的排序方法将无效。

"name":{

"type": "text",

"fielddata": true

}

 

3 搜索特定时间的内容

使用searchSourceBuilder,.sort(new FieldSortBuilder("date").order(SortOrder.DESC))降序排序,排序规则会使用date字段的日期排序,此时使用boolQueryBuilder.filter(QueryBuilder.rangeQuery("date").gte(startYear).lte(endYear))会有坑。

例如:ES数据库里有较多的2016-2020年的数据,如果startYear=2016-01-01,endYear=2018-12-30,按照分页查询,可能搜索不到数据;如果startYear=2020-01-01,endYear=2020-12-30能搜索到数据,因为数据按照日期降序排序,数据的权重顺序从2020-2016,2020年的顺序靠前,所以第二种情况可以查到。根本原因是ES查询的时候,先依据sort排序,然后,才使用filter进行的查询

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Elasticsearch排序问题可能出现在聚合操作。根据引用的描述,Elasticsearch排序操作时,会先对每个分片进行排序,然后将每个分片的前17名结果进行再次聚合和排序,最终返回排序后的前5条记录作为结果。这个排序策略来源于官方给出的算式,根据算式,如果请求只发往一个分片,就返回前5条记录;如果请求发送给多个分片,每个分片返回的记录数是5 * 1.5 = 17。这个策略可能导致在返回的数据,实际的排序结果与期望的排序结果不一致。 因此,如果你在Elasticsearch遇到排序问题,可以检查是否涉及到了多个分片,并且了解Elasticsearch排序策略。你可以参考引用提供的链接来了解更多关于Elasticsearch排序操作的详细信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Elasticsearch聚合学习之五:排序结果不准的问题分析](https://blog.csdn.net/boling_cavalry/article/details/90319399)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [3. elasticsearch 汇总排序问题剖析](https://blog.csdn.net/wangzhiqiang123456/article/details/123073114)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值