Elasticsearch:根据日期范围过滤结果

我正在使用Elasticsearch

6.6,尝试根据在日期范围内传递给查询(Bool)的多个值(email_address)提取多个结果/记录。例如:我想根据他们的email_address(annie@test.com,charles@test.com,heman@test.com)以及时期(即project_date(2019-01-01))提取有关少数雇员的信息。

我确实使用了应该表达,但不幸的是,它基于日期范围从elasticsearch中提取所有记录,即甚至从project_date

2019-01-01中提取其他员工信息。

{

"query": {

"bool": {

"should": [

{ "match": { "email_address": "annie@test.com" }},

{ "match": { "email_address": "chalavadi@test.com" }}

],

"filter": [

{ "range": { "project_date": { "gte": "2019-08-01" }}}

]

}

}

}

我也尝试过必须表达,但没有结果。您能帮我用日期范围内的email_address查找员工吗?

提前致谢。

回答:

Should(Or)子句是可选的

从引用此文章。“在查询中,如果存在必须查询和过滤器查询,则应查询应该会影响分数。但是,如果布尔查询处于过滤器上下文中,或者既没有必须查询也没有过滤器查询,则至少应有一个查询查询必须与文档匹配。”

因此,在您的查询中,应该只影响得分,而不实际过滤文档。您必须将must包装在must中,或将其移动到过滤器中(如果不需要评分)。

GET employeeindex/_search

{

"query": {

"bool": {

"filter": {

"range": {

"projectdate": {

"gte": "2019-01-01"

}

}

},

"must": [

{

"bool": {

"should": [

{

"term": {

"email.raw": "abc@text.com"

}

},

{

"term": {

"email.raw": "efg@text.com"

}

}

]

}

}

]

}

}

}

您也可以使用@AlwaysSunny的答案中的条款子句替换should子句。

以上是 Elasticsearch:根据日期范围过滤结果 的全部内容, 来源链接: utcz.com/qa/434307.html

回到顶部