我的类型是用户:电子邮件和用户名。
电子邮件字段设置为字符串类型,带有自定义分析器' exact_lower':
index.analysis.analyzer.exact_lower:
type: custom
tokenizer: keyword
filter : lowercase
问题是,当我搜索完整的电子邮件地址时,它会返回匹配,就好像' @'是一个空间。我认为由于它使搜索标记化。
查询我发送信息:
{
"query" : {
"query_string" : {
"query" : "admin@example.com"
}
}
}
它返回任何匹配' admin'或者' example.com'。例如。 admin @ example.com,admin @ abc.com和john@example.com。我希望它只返回admin@example.com ...
我想我需要告诉搜索不要对query_string
进行标记,但是我们无法弄清楚如何做到这一点。
非常感谢任何帮助!谢谢, 塞特
答案 0 :(得分:4)
就是这样,因为query_string
正在使用_all
字段作为搜索的默认字段。那个领域有自己的分析仪。
为email
字段定义分析器不会将同一分析器应用于_all
字段。有关_all
的更多详细信息,您可以找到here。
为了准确匹配电子邮件地址,我建议使用不同的查询:
{
"query": {
"term": {
"email": {
"value": "admin@example.com"
}
}
}
}
或使用query_string
,但引用特定字段:
{
"query": {
"query_string": {
"query": "email:admin@example.com"
}
}
}