用于电子邮件的ElasticSearch通配符标记器

csbfibhn  于 2023-01-25  发布在  ElasticSearch
关注(0)|答案(1)|浏览(196)

假设在字段“email”下存储了五个电子邮件地址:

1. {"email": "john_1@gmail.com"}
2. {"email": "john_2@gmail.com"}
3. {"email": "john_3@outlook.com"}
4. {"email": "john_4@outlook.com}
5. {"email": "john_5@yahoo.com"}

当我尝试用完整的电子邮件地址搜索时,我得到了正确的结果。如果我尝试用部分电子邮件搜索,我没有得到任何结果。
例如,如果我尝试只搜索johjohn_,但是如果我尝试搜索john_1,我可以得到结果。在这种情况下如何得到通配符结果。

PUT /test
{
  "settings": {
    "analysis": {
      "filter": {
        "email": {
          "type": "pattern_capture",
          "preserve_original": 1,
          "patterns": [
            "([^@]+)",
            "(\\p{L}+)",
            "(\\d+)",
            "@(.+)",
            "([^-@]+)"
          ]
        }
      },
      "analyzer": {
        "email": {
          "tokenizer": "uax_url_email",
          "filter": [
            "email",
            "lowercase",
            "unique"
          ]
        }
      }
    }
  },
  "mappings": {
    "emails": {
      "properties": {
        "email": {
          "type": "string",
          "analyzer": "email",
          "search_analyzer": "standard",
          "fields": {
            "raw": {
                "type": "keyword"
            }
          }
        }
      }
    }
  }
}
8aqjt8rx

8aqjt8rx1#

尝试使用通配符查询。
示例:

{
  "query": {
    "wildcard": {
      "email": {
        "value": "joh*"
      }
    }
  }
}

相关问题