为什么通配符不能在 Elasticsearch 中使用“@”?

why wildcard cannot use `@` in Elasticsearch?

我想在 Elasticsearch 中使用通配符搜索电子邮件。

例如:

{
  "query": {
       "wildcard": {
     "email": "*yahoo*"
    }
  }
}

我可以获得所有包含 yahoo 的电子邮件。但是如果我这样搜索,没有文档 return.

{
  "query": {
       "wildcard": {
     "email": "*@yahoo*"
    }
  }
}

我不明白为什么会这样。任何人都可以帮助我吗?

提前致谢!

Standard Analyzer 是你的罪魁祸首。

email 索引中的字段似乎是 analyzed 字符串。因此,当您对其进行索引时,它将拆分为 somemailyahoo.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

搜索,你可以使用uax_url_email

希望对您有所帮助!!