当前位置: 首页 > news >正文

es match 可查 而 term 查不到 问题分析

es 匹配逻辑

根本:es 的匹配是基于token 的。检索的query和目标字段在token 层级上有交集才能检索成功。对同样的文本,使用不同的分词器,所得token 不同。es 默认的analyzer(分词器)是standard模式,即按字切分。

基本上,如果query 使用match 可以查到结果,而term 查不到,就是query 本身没有作为一个token在es 中存在

实例分析

# 设置mapping,可指定每个字段的type、analyzer,如果不设置,es 会自动创建typedoc = {'mappings': {'properties': {'name': {'type': 'text',"analyzer": "whitespace"},'age': {'type': 'integer'}}}}# 创建索引,同时指定mappinges.indices.create(index='tt', body=doc)# 录入数据
# 小 明明,对应的token [小, 明明]xiaoming = {"name": "小 明明","age": 10}
# 李 东东,对应的token [李, 东东]dongdong = {"name": "李 东东","age": 9}es.index(index='tt', id='1', document=xiaoming)es.index(index='tt', id='2', document=dongdong)# 使用 “李 明明” 作为query 检索ts = {"query": {"term": {"name": "李 明明"}}}ts2 = {"query": {"match": {"name": {"query": "李 明明","analyzer": "whitespace"}}}}ts3 = {"query": {"match": {"name": {"query": "李 明明"}}}}res = es.search(index='tt', body=ts)  # 结果为空res2 = es.search(index='tt', body=ts2)  # 小 明明 和 李 东东都能检索出来res3 = es.search(index='tt', body=ts3)  # 李 东东能检索出来

上例中,对于ts, 采用term 方式检索,term是不分词的,相当于采用keyword 分词器,因此token=[李 明明],显然,对于索引 tt,不存在这样的token,因此无法检索到信息。

对于ts2,采用match 方式检索,分词器为whitespace,token=[李,明明],因此和[小, 明明]存在交集【明明】;和[李 东东]存在交集【李】。所以两条数据都能检索出来。

对于ts3,采用match 方式检索,没有指定分词器,默认为standard,token=[李,明,明],和[李, 东东]存在交集【李】。所以李 东东能检索出来。

http://www.lryc.cn/news/532381.html

相关文章:

  • 【OpenCV实战】基于 OpenCV 的多尺度与模板匹配目标跟踪设计与实现
  • 将有序数组转换为二叉搜索树(力扣108)
  • 开放式TCP/IP通信
  • S4 HANA (递延所得税传输)Deferred Tax Transfer - S_AC0_52000644
  • 如何从0开始做自动化测试?
  • DeepSeek服务器繁忙问题的原因分析与解决方案
  • C#,入门教程(10)——常量、变量与命名规则的基础知识
  • 宏观经济:信贷紧缩与信贷宽松、通货膨胀与通货紧缩以及经济循环的四个周期
  • 分层解耦.
  • JAVA异步的TCP 通讯-客户端
  • MySQL的存储引擎对比(InnoDB和MyISAM)
  • 【2025-02-06】简单算法:相向双指针 盛最多水的容器 接雨水
  • 2.6-组合博弈入门
  • 【教学】推送docker仓库
  • 【大数据技术】本机PyCharm远程连接虚拟机Python
  • 3060显卡掉帧是为什么?3060掉帧卡顿解决方法
  • Kubernetes集群通过Filebeat收集日志
  • SQLAlchemy-2.0中模型定义和alembic的数据库迁移工具
  • [含文档+PPT+源码等]精品基于Python实现的django个性化健康餐计划订制系统
  • Python3中异常处理:try/except语句
  • [ Spring] Integrate Spring Boot Dubbo with Nacos 2025
  • 【3分钟极速部署】在本地快速部署deepseek
  • 【QT笔记】使用QScrollArea实现多行文本样式显示
  • 大模型中提到的超参数是什么
  • 【Uniapp-Vue3】z-paging插件组件实现触底和下拉加载数据
  • UE虚幻引擎No Google Play Store Key:No OBB found报错如何处理
  • OKHttp拦截器解析
  • STM32标准库移植RT-Thread nano
  • c++11总结26——std::regex
  • langchain教程-12.Agent/工具定义/Agent调用工具/Agentic RAG