在 Elasticsearch JS 中使用术语



因为Elasticsearch有很棒的文档,我无法找出搜索术语的正确语法,这是我的代码:

let checkuser = await client.search({
index: "users",
type: "my_users",
body: {
query: {
term: {
email: req.body.email
}
}
}
});

我希望搜索一个具有与特定电子邮件的键值对"电子邮件"的对象,但我希望它是我写的确切电子邮件,如果它 a@mail.com ab@mail.com 应该不匹配,我知道我需要使用术语但是当我这样写它不起作用时,我的语法有什么问题?

PS这是我的索引映射:

"users" : {
"mappings" : {
"jobix_users" : {
"properties" : {
"confirmed" : {
"type" : "boolean"
},
"email" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"firstName" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"jobNotification" : {
"type" : "boolean"
},
"jobTitle" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"lastName" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"password" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"userName" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
}

使用默认映射,这意味着在索引文档时使用标准分词器。

如何在映射电子邮件字段中看到有两种解释:

  1. 发短信
  2. 关键词

在文本中,标准分词器是工作并将令牌保存到索引。这意味着您可以找到术语 alex 和术语 mail.com。如果要查找整个电子邮件,则查询应如下所示:

{
"query": {
"term": {
"email.keyword": req.body.email
}
}
}   

但是 elasticsearch 有特殊的 uax_url_email 标记器,用于 url 和邮件。我想建议在电子邮件字段中使用此标记器。

最新更新