elasticsearch - 术语弹性查询未找到字母数字关键字文本的匹配项
问题描述
在以下情况下,我将如何使用术语或术语弹性查询?
该字段的映射集
paidagentnumber
如下"paidagentnumber": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }
GET statements_full/statements/_search?q=paidagentnumber:"017M0"
正在系统中查找 80 条记录但以下
GET
没有得到任何记录获取 statements_full/statements/_search { “询问”: { “期限”:{“付费代理号码”:“017M0”} } }
但
获取 statements_full/statements/_search { “询问”: { “期限”:{“付费代理号码”:“21212”} } }
正在查找命中结果,即如果
paidagentnumber
字段中没有字母(只有数字),则term
查询正在查找命中。
解决方案
该paidagentnumber
字段被分析(因为它是"type": "text"
),因此它的内容将被分析器小写。术语查询不被分析,根据文档,它们用于查找“倒排索引中指定的确切术语”,因此这种小写分析不会应用于查询,因此两者之间的不匹配。“017M0”与“017m0”不完全匹配。
您可以在这里选择:
使用query_string 查询。这是
q
参数创建的同一类型的查询,因此如果按您的意愿工作,请使用:"query": { "query_string" : { "query": "paidagentnumber:017M0" } }
如果要使用术语查询,请使用关键字字段。您已经在此处创建了一个,因此只需搜索该
paidagentnumber.keyword
字段即可。"query": { "term" : { "paidagentnumber.keyword": "017M0" } }
如果您一开始并不真的想要对paidagentnumber 字段进行任何类型的文本分析,那么您也可以
text
从它的定义中消除该类型:"paidagentnumber": { "type": "keyword", "ignore_above": 256 }
推荐阅读
- swiftui - SwiftUI - 样式选择器,如形式
- image - 尝试在单个图像 CNN pytorch 上进行预测时出错
- r - ggtext::geom_textbox:如何将链接显示为原始文本?
- python - 是否可以使用 osmnx.plot 模块绘制节点 osmid #'s?
- angular - 如何使用 Angular Material DateRangePicker 仅输入结束日期,即有效期至
- python - 从 Django 中的 DateTimeField 中排除日期
- jenkins - 在詹金斯管道中执行不稳定和成功的脚本
- python - 我有一个被忽略的while循环,即使它不应该| 硒 | Python
- flutter - ListView 兼容 StatefulWidget
- javascript - How to prevent letters from being entered in a numeric input field in Ant Design library (React js)