为什么通配符不能在 Elasticsearch 中使用“@”?
why wildcard cannot use `@` in Elasticsearch?
我想在 Elasticsearch 中使用通配符搜索电子邮件。
例如:
{
"query": {
"wildcard": {
"email": "*yahoo*"
}
}
}
我可以获得所有包含 yahoo
的电子邮件。但是如果我这样搜索,没有文档 return.
{
"query": {
"wildcard": {
"email": "*@yahoo*"
}
}
}
我不明白为什么会这样。任何人都可以帮助我吗?
提前致谢!
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
搜索,你可以使用uax_url_email
希望对您有所帮助!!
我想在 Elasticsearch 中使用通配符搜索电子邮件。
例如:
{
"query": {
"wildcard": {
"email": "*yahoo*"
}
}
}
我可以获得所有包含 yahoo
的电子邮件。但是如果我这样搜索,没有文档 return.
{
"query": {
"wildcard": {
"email": "*@yahoo*"
}
}
}
我不明白为什么会这样。任何人都可以帮助我吗?
提前致谢!
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
希望对您有所帮助!!