我想使用通配符在Elasticsearch中搜索电子邮件。
例如:
{
"query": {
"wildcard": {
"email": "*yahoo*"
}
}
}
我可以收到所有包含yahoo
封电子邮件。但如果我这样搜索,就没有文件返回。
{
"query": {
"wildcard": {
"email": "*@yahoo*"
}
}
}
我不明白为什么会这样。有人可以帮帮我吗?
提前致谢!
答案 0 :(得分:3)
Standard Analyzer是你案件的罪魁祸首。
索引中的 email
字段似乎是analyzed
字符串。因此,当您对其编制索引时,它将分为somemail
,yahoo.com
,这两个标记将保存在reverse index
中。这就是您无法使用@yahoo
进行搜索的原因。
您可以使用analyze
api查看您的字词是如何被标记化的。
curl -XGET "http://localhost:9200/_analyze?tokenizer=standard" -d "test@yahoo.com"
您将获得以下输出:
{"tokens":[{"token":"test","start_offset":0,"end_offset":4,"type":"<ALPHANUM>","position":0},{"token":"yahoo.com","start_offset":5,"end_offset":13,"type":"<ALPHANUM>","position":1}]}
如果您想使用@yahoo
希望这会有所帮助!!