我有一个包含电子邮件ID的字段,当我尝试匹配整个电子邮件ID时,它与文档不匹配,但是当我不包含@时,文档匹配。我尝试将@替换为。和*,它们都没有帮助匹配。
如何匹配整个电子邮件?
例如文档:
{
...
"email": "sample@gmail.com"
}
例如失败查询:
{
"query": {
"query_string": {
"default_field": "email",
"query": "*mple@gmail.c*"
}
}
}
例如成功查询:
{
"query": {
"query_string": {
"default_field": "email",
"query": "*ample*"
}
}
}
答案 0 :(得分:2)
正如Richie在另一篇文章中已经提到的,这里与您的搜索查询不匹配,因为Elastic的默认分析器是standard
分析器,它在标记化过程中从文本中删除了特殊字符。
您需要做以下事情才能使其正常工作。
在希望@
可搜索的字段上使用自定义分析器。在您的ES模式中定义它。
http://localhost:9200/{your_index_name}/_mapping
的O / P,其中将 your_index_name 替换为您的索引名称,并验证自定义分析器现在使用的字段。@
组成的令牌。如果您在执行此操作时遇到任何问题,请告诉我。
答案 1 :(得分:0)
是的,因此从https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-uaxurlemail-tokenizer.html中您可以看到标准分析仪可以制造
POST _analyze
{
"text": "Email me at john.smith@global-international.com"
}
到
[ Email, me, at, john.smith, global, international.com ]
uax_url_email分析器所做的
[ Email, me, at, john.smith@global-international.com ]