gpt4 book ai didi

elasticsearch - 查询必须完全匹配2个字段,请勿进行分析

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

我尝试了几种不同的方式来执行简单的get请求,并过滤了两个不同的属性,示例:

"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"email": "erik.landvall@example.com"
}
},
{
"term": {
"password": "bb3810356e9b60cf6..."
}
}
]
}
},
"query": {
"match_all": []
}
}
}

问题是我一无所获。据我了解,这是因为ElasticSearch分析了电子邮件字段,从而使查询失败。因此,如果我使用术语 erik.landvall而不是完整的电子邮件地址,它将与文档匹配-这确认了正在发生的事情。

创建索引时,可以将属性定义为 type:stringindex:not_analyzed。但是,如果我想能够在不同的上下文中搜索email属性怎么办?因此,我认为应该有一种方法可以指定我要对查询中属性的实际值进行过滤。但是,我找不到这种查询的样子。

查询时是否可以强制Elasticsearch使用“ not_analyze”?如果是这样,那又如何?

最佳答案

您可以为此使用scripting。您将必须直接访问用_source存储的JSON。尝试以下查询

{
"query": {
"bool": {
"filter": {
"script": {
"script": {
"inline" : "_source.email==param1 && _source.password==param2",
"params" : {
"param1" : "erik.landvall@example.com",
"param2" : "bb3810356e9b60cf6"
}
}
}
}
}
}
}

您需要 enable dynamic scripting。将 script.inline: on添加到您的yml文件,然后重新启动节点。

如果这种查询相当定期,那么最好按照其他人在注释中建议的那样重新索引数据。

关于elasticsearch - 查询必须完全匹配2个字段,请勿进行分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40025108/

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