gpt4 book ai didi

elasticsearch - 在Elasticsearch中无法正确搜索电子邮件

转载 作者:行者123 更新时间:2023-12-02 22:44:40 29 4
gpt4 key购买 nike

我在Elasticsearch中索引了一些文档,这些文档以电子邮件ID作为字段。但是,当我查询特定的电子邮件ID时,搜索结果将显示所有文档,而无需过滤。

这是我使用过的查询

{
"query": {
"match": {
"mail-id": "abc@gmail.com"
}
}
}

最佳答案

默认情况下,标准分析器将分析您的mail-id字段,该字段会将电子邮件abc@gmail.com标记为以下两个标记:

{
"tokens" : [ {
"token" : "abc",
"start_offset" : 0,
"end_offset" : 3,
"type" : "<ALPHANUM>",
"position" : 1
}, {
"token" : "gmail.com",
"start_offset" : 4,
"end_offset" : 13,
"type" : "<ALPHANUM>",
"position" : 2
} ]
}

相反,您需要使用 UAX email URL tokenizer创建自定义分析器,该分析器会将电子邮件地址标记为一个标记。

因此,您需要按以下方式定义索引:
curl -XPUT localhost:9200/people -d '{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"type": "custom",
"tokenizer": "uax_url_email"
}
}
}
},
"mappings": {
"person": {
"properties": {
"mail-id": {
"type": "string",
"analyzer": "my_analyzer"
}
}
}
}
}'

创建该索引后,您可以看到电子邮件 abc@gmail.com将被标记为单个标记,并且您的搜索将按预期进行。
 curl -XGET 'localhost:9200/people/_analyze?analyzer=my_analyzer&pretty' -d 'abc@gmail.com'
{
"tokens" : [ {
"token" : "abc@gmail.com",
"start_offset" : 0,
"end_offset" : 13,
"type" : "<EMAIL>",
"position" : 1
} ]
}

关于elasticsearch - 在Elasticsearch中无法正确搜索电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35124725/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com