
ES中match_phrase_prefix查询返回为空
发布日期:2021-05-14 04:38:41
浏览次数:13
分类:博客文章
本文共 809 字,大约阅读时间需要 2 分钟。
ES查询利用的是matchPhrasePrefixQuery,在查询日志的时候,发现输入关键字:2021-03-08 16,可以查询出来一些数据,但是如果输入关键字:2021-03-08 1则无法查询出来任何日志。
后来经过调研发现,为了保证良好的性能, es的match_phrase_prefix查询,默认的max_expansions是50。
由于匹配是逆向的,所以当你输入 mytest L的时候,由于日志中L很多,他会将前50项含有L的日志,添加到自己的结果集中,然后再匹配mytest, 但是由于这50项日志中,不一定会有mytest,所以日志返回为空; 但是为啥输入mytest LR就有日志了呢, 因为LR比较精确,他也是找前50项含有LR的日志,添加到结果集,然后再匹配mytest。 这里我做的改动,就是将max_expansions调整到了最大,Integer.MAX_VALUE,这也是为啥结果能出来了:QueryBuilders.matchPhrasePrefixQuery("msg", queryParam.getKeyword().trim()).maxExpansions(Integer.MAX_VALUE)个人认为, 查不到,不是bug,而是es的优化,因为他期待你查询的时候,尽量用精确的查询来找到结果,而模糊的查询,由于性能问题,他会给你屏蔽掉
参考:
https://stackoverflow.com/questions/47182126/elasticsearch-match-phrase-prefix-not-matching-all-terms
https://stackoverflow.com/questions/25485441/elastic-search-match-phrase-prefix-not-able-to-find-all-records
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月23日 23时54分49秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
OSPF多区域
2019-03-12
Grafana导入 Promethus node模板
2019-03-12
如何提高SQL查询的效率?
2019-03-12
Docker入门之-镜像(二)
2019-03-12
数据结构——链表(3)
2019-03-12
socket模块和粘包现象
2019-03-12
Python学习--模块
2019-03-12
去了解拉绳位移编码器的影响因素
2019-03-12
影响拉线位移传感器精度的原因有哪些?
2019-03-12
无法初始化Winsock2.2处理
2019-03-12
Horizon Cloud之UAG访问异常
2019-03-12
vm无法打开电源
2019-03-12
vMotion 操作失败进度卡在14% ,报错: Operation Timed out
2019-03-12
重置UAG Application admin密码
2019-03-12
Horizon Daas租户管理平台扩展分配时报:内部错误
2019-03-12
vcenter访问报503错误处理
2019-03-12
项目计划甘特图绘制说明
2019-03-12
09.QT应用程序启动外部exe文件
2019-03-12
1009. clion调试段错误
2019-03-12
C/C++:线性表之顺序表
2019-03-12