当前位置: 首页 > 面试题库 >

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

宋朝
2023-03-14
问题内容

我正在使用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子句。



 类似资料:
  • 问题内容: 我的服务器的CPU使用率异常高,我可以看到Apache使用了太多的内存。我有一种感觉,我被一个IP所包围-也许您可以帮助我找到他? 我使用以下行来查找10个最“活跃”的IP: 前5个IP对服务器的请求大约是“平均”用户的200倍。但是,我无法确定这5位访问者是否只是非常频繁的访问者,或者他们正在攻击服务器。 有没有办法将上述搜索指定到一个时间间隔,例如 最近两个小时还是今天的10到12

  • 我正在使用弹性搜索。我以前从未使用过的网络NEST客户端。我想做的是在得分前按日期范围过滤结果。 我使用对象初始值设定项语法,因为它最适合我。 我已经完成了我想要的: 这给了我一个JSON请求,就像我期望的那样: 但留档过滤查询说"弃用在2.0.0-beta1.改为使用bool查询,查询的必须子句和筛选器子句”。 因为这是我发现的唯一包含过滤器的方法,有没有更好的方法来使用嵌套对象初始值设定项语法

  • 问题内容: 我正在尝试通过键入日期范围来过滤包含时间戳的列表 例如: JSFIDDLE html javascript 我希望能够用值填充“发件人”字段:27-05-2010 并且“ To”字段的值为:29-07-2015 并仅获取该范围内的记录。 (示例中的第一条记录)。 谢谢分配阿维 问题答案: 您可以创建一个自定义过滤器来实现此目的。 JSFIDDLE html javascript 此外,

  • 问题内容: 我在elasticsearch中存储以下信息: 假设我还有另一个日期范围(例如,从用户输入中得出),我想搜索一个相交的时间范围。与此类似:确定两个日期范围是否重叠这概述了以下逻辑: 但是我不确定如何将其放入elasticsearch查询中,我会使用范围过滤器并且仅将“ to”值设置为,而将from留为空白吗?还是有一种更有效的方法? 问题答案: 更新:现在可以使用在elasticsea

  • 我在一个表(即TAB1)中有多个日期范围,如下所示。 对上面的SQL查询有什么建议吗?

  • 问题内容: 我正在尝试在ElasticSearch中创建一个 布尔过滤器 ,以检查和与今天进行比较。如果或为null,则仍应返回结果。 例如,今天是2016-08-09。 项目1 :起始日期:2016年8月4日END_DATE:2016年8月8日 不应该被返回 项目2 :起始日期:2016年8月8日END_DATE:2016年8月12日 应返回 项目3 :开始日期:null结束日期:null 应该