我的类型是用户:电子邮件和用户名。
电子邮件字段设置为字符串类型,使用自定义分析器“exact_lower”:
index.analysis.analyzer.exact_lower:
type: custom
tokenizer: keyword
filter : lowercase
Run Code Online (Sandbox Code Playgroud)
问题是,当我搜索完整的电子邮件地址时,它返回匹配项,就好像“@”是空格一样。我认为这是因为它标记了搜索。
我发送的查询:
{
"query" : {
"query_string" : {
"query" : "admin@example.com"
}
}
}
Run Code Online (Sandbox Code Playgroud)
它返回任何与“admin”或“example.com”匹配的内容。例如 admin@example.com、admin@abc.com 和 john@example.com。我希望它只返回 admin@example.com...
我想我需要告诉搜索不要标记query_string,但一直无法弄清楚如何做到这一点。
任何帮助深表感谢!谢谢,赛斯
就像那样,因为query_string正在使用该_all字段作为搜索的默认字段。该领域有自己的分析器。
为您的领域定义分析器email并不是将相同的分析器应用于该_all领域。有关您的更多详细信息,_all请参阅此处。
为了完全匹配电子邮件地址,我建议使用不同的查询:
{
"query": {
"term": {
"email": {
"value": "admin@example.com"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
或使用query_string,但指的是特定字段:
{
"query": {
"query_string": {
"query": "email:admin@example.com"
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1865 次 |
| 最近记录: |