当前位置: 首页 > 知识库问答 >
问题:

比较2个字段的elasticsearch查询(使用java)

赫连俊悟
2023-03-14

我知道可以使用FilteredQuery,现在不推荐使用。类似于咆哮的代码

FilteredQueryBuilder query = QueryBuilders.filteredQuery(null,
    FilterBuilders.scriptFilter("doc['creationDate'].value = doc['modifiedDate'].value"));

另外,也许可以将手动脚本写成字符串,但我怀疑这是否是正确的解决方案。任何创建正确查询的想法都将受到欢迎。

共有1个答案

宗政楚
2023-03-14

筛选后的查询已被bool/filter查询所取代,您可以如下所示:

BoolQueryBuilder bqb = QueryBuilders.boolQuery()
    filter(QueryBuilders.scriptQuery("doc['creationDate'].value = doc['modifiedDate'].value"));

但是,与其在搜索时使用脚本,不如在索引时创建一个新字段,其中包含creationdatemodifieddate是否是相同日期的信息。然后,您可以简单地在查询时检查该标志,这将是更优化和更快的。

如果不想重新索引所有数据,可以使用该标志更新所有数据,只需运行update by查询,如下所示:

{
  "script": {
    "source": """
    def creationDate = Instant.parse(ctx._source.creationDate);
    def modifiedDate = Instant.parse(ctx._source.modifiedDate);
    ctx._source.modified = ChronoUnit.MICROS.between(creationDate, modifiedDate) > 0;
    """,
    "lang": "painless"
  },
  "query": {
    "match_all": {}
  }
}
BoolQueryBuilder bqb = QueryBuilders.boolQuery()
    filter(QueryBuilders.termQuery("modified", "false");
 类似资料:
  • 问题内容: 我的Firestore集合的文档带有字符串字段,该字段可以为 null 。 我期望如果我查询: 我将获取“ producedDate”早于“ 2018-10-15”的所有产品,包括那些“ producedDate”为空的产品。 但是实际上我没有得到s。 这是故意的还是一个错误? 问题答案: 它打算以这种方式工作。该文档指出: 当查询涉及具有 混合类型值的 字段时,Cloud Fires

  • 问题内容: 假设我有包含以下字段的文档: 我需要运行一些查询,其中某些条件将需要在两个或多个字段之间进行比较。喜欢 在标准SQL中,一个示例可能是: 我正在阅读一些文档,看起来“脚本”可能是实现此目的的唯一方法?还是还有其他选择? 问题答案: 您可以使用脚本过滤器- 您可以在此处和此处找到更多信息。

  • 问题内容: 我一直认为您可以在语句中使用它来查询MySQL中的内容。因此,如果我想将一行中的多个字段与1个关键字或字词进行比较: 如果我有一系列要比较的单词: 我不相信语法是正确的。除了类似的东西,是否有一种有效的方法可以编写此代码: 我能正确处理吗? 问题答案: 用这个::

  • 我配置了一个带有两个字段的Elasticsearch索引:“name”和“type”。当我执行下面的查询时,没有得到任何结果,因为“actor”在“type”字段中。 有没有任何方法可以执行一个包含多个单词的查询,并且即使一些单词在“name”字段中而其他单词在“type”字段中也可以得到结果。 谢谢你的帮助!

  • 问题内容: 我存储的文档包含两个字段,即startDate和endDate。我想使用输入日期运行Elastic查询,并返回其startDate和endDate包含该日期的所有文档。例如, 如果我输入的日期为2015-01-02,则此文档应出现在结果中,因为输入的日期在开始日期和结束日期字段的范围内。 我可以使用一个字段进行范围查询,但由于范围仅接受一个,因此我不知道如何使用两个日期字段: 我还需要

  • 问题内容: 我想知道如何比较两个不同的数据库 表记录 。我的意思是,我将比较两个数据库表,它们可能具有不同的列名但具有相同的数据。但是其中一个表可能比另一个表具有更多的记录,因此我想看看这两个表之间的区别是什么。为此,如何编写sql查询?仅供参考:这两个数据库都在同一个SQL Server实例下。 然后,在比较表1和表2之后,它应该 从 表2返回 Ruby Core。 问题答案: 如果执行从T1到