elasticsearch - 为什么@与elasticsearch中的query_string查询不匹配?
问题描述
我有一个带有电子邮件 ID 的字段,当我尝试匹配整个电子邮件 ID 时,它与文档不匹配,但当我不包含 @ 文档匹配时。我尝试将 @ 替换为 . 和*,它们都没有帮助匹配。
如何匹配整个电子邮件?
例如文档:
{
...
"email": "sample@gmail.com"
}
例如失败查询:
{
"query": {
"query_string": {
"default_field": "email",
"query": "*mple@gmail.c*"
}
}
}
例如成功查询:
{
"query": {
"query_string": {
"default_field": "email",
"query": "*ample*"
}
}
}
解决方案
正如 Richie 在另一篇文章中已经提到的,这里它与您的搜索查询不匹配,因为 Elastic 中的默认分析器是standard
分析器,它在标记化过程中从文本中删除特殊字符。
您需要执行以下操作才能使其正常工作。
@
在您希望可搜索的字段上使用您的自定义分析器。在您的 ES 模式中定义它。- 检查将your_index_name
http://localhost:9200/{your_index_name}/_mapping
替换为您的索引名称的 O/P并验证现在使用的字段,自定义分析器。 - 重新索引整个数据,因为更改字段的分析器是一项重大更改,并且只有在您重新索引整个数据之后,使用新的映射才会有预期的标记。
- 使用_analyze api检查为您的字段生成的令牌。现在它应该有包含
@
.
如果您在实施此操作时遇到任何问题,请告诉我。
推荐阅读
- scala - 范围内的隐式参数不应该用作宏生成代码的隐式参数吗?
- javascript - 等待 Promise Value 的行为
- javascript - 使用 Javascript 读取 Linux 系统文件?
- salesforce - 我能否在 Salesforce 中不让用户知道的情况下阻止将记录插入对象触发器中?
- javascript - 存储画布上下文并稍后编辑属性
- php - ConvertAPI 结果数组而不是 ResultFiles
- javascript - 碰撞检测的问题是 JavaScript
- excel - 需要匹配第一列中的条件,然后匹配第二列中的条件以显示该行信息
- field - Hapi HL7如何计算一个段或字段重复的次数
- macos - 有没有办法将文件夹中每个 PDF 的第一页提取到一个组合 PDF 中?