gpt4 book ai didi

elasticsearch - 弹性条款查询电子邮件不起作用

转载 作者:行者123 更新时间:2023-12-03 02:34:43 25 4
gpt4 key购买 nike

我想在Elastic Search Query中传递电子邮件列表,所以我尝试在下面的查询中实现此目的,但未得到任何结果。

{
"query": {
"terms": {
"email": [ "andrew@gmail.com", "michel@gmail.com" ]
}
}
}

当我使用 id 而不是电子邮件时,该方法有效!
{
"query": {
"terms": {
"id": [ 43, 67 ]
}
}
}

您能否解释一下我的电子邮件查询出了什么问题以及其运作方式

最佳答案

如果要将电子邮件地址识别为单个 token ,则应使用uax_url_email token 生成器。

UAX URL Email Tokenizer

一个工作示例:

映射

PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_email_analyzer": {
"type": "custom",
"tokenizer": "my_tokenizer",
"filter": ["lowercase", "stop"]
}
},
"tokenizer": {
"my_tokenizer":{
"type": "uax_url_email"
}
}
}
},
"mappings": {
"properties": {
"email": {
"type": "text",
"analyzer": "my_email_analyzer",
"search_analyzer": "my_email_analyzer",
"fields": {
"keyword":{
"type":"keyword"
}
}
}

}
}
}

发布一些文件
POST my_index/_doc/1
{
"email":"andrew@gmail.com"
}

POST my_index/_doc/2
{
"email":"michel@gmail.com"
}

搜索查询
GET my_index/_search
{
"query": {
"multi_match": {
"query": "andrew@gmail.com michel@gmail.com",
"fields": ["email"]
}
}
}

结果
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 0.6931472,
"hits" : [
{
"_index" : "my_index",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.6931472,
"_source" : {
"email" : "andrew@gmail.com"
}
},
{
"_index" : "my_index",
"_type" : "_doc",
"_id" : "2",
"_score" : 0.6931472,
"_source" : {
"email" : "michel@gmail.com"
}
}
]
}

另一种选择是使用 keyword类型。

搜索查询
GET my_index/_search
{
"query": {
"terms": {
"email.keyword": [
"andrew@gmail.com",
"michel@gmail.com"
]
}
}
}

我认为使用 uax_url_email标记器是更好的解决方案。

希望这可以帮助

关于elasticsearch - 弹性条款查询电子邮件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59119569/

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