【问题标题】:QueryDSL _id query within scriptQueryDSL _id 查询脚本内
【发布时间】:2018-06-27 14:16:02
【问题描述】:

我正在使用 Elasticsearch 和 Kibana v5.6 并在 devTools 中,我可以使用 querydsl 中的脚本来查询有关字段名 = 值的文档,即:

GET indexA/_search
{
  "query":{ "script":{ "script": """
     def a = doc['field1'].value;
     return a == 'value1';
  """}}
}

Above 将返回所有在名为“field1”的字段中具有“value1”作为值的文档。但是我无法在 _id 上搜索,官方文档说在 v6 之前我们应该使用 _uid,所以我尝试过,但没有运气。我使用脚本是因为在我能够使用 _uid 获取 _id 的值之后,基本上我想做一些类似于下面的值比较:

GET indexA/_search
{
  "query":{ "script":{ "script": """
     def a = doc['field1'].value;
     def b = doc['_uid'].value;
     return a == b;
  """}}
}

我认为 devTools 是我想要执行此操作的地方,而不是其他地方。任何指针表示赞赏

【问题讨论】:

  • field1 是什么样的,当您尝试运行查询时会发生什么?
  • field1 实际上是文档正文中的任何字段,当运行第一个查询时,它将返回所有包含'value1'的文档。例如,在 Elasticsearch 中,如果我有 3 个文档 { "name": "Adam", "field1" : "value1"} , { "name": "Tom", "field1" : "value1"} 和 { " name": "RC", "field1" : "value2"} 那么上面的查询会返回 2 doc,Adam 和 Tom 的 doc

标签: elasticsearch kibana querydsl


【解决方案1】:

您指的是Query Id's 文档或this one 但在错误的上下文中部署您需要在ids 的单独头部中定义id 或放在term 字段 _id

【讨论】:

  • 感谢您的回复,您是否可以使用另一种方法来比较 body 与 _id 的字段?如果是这样,你介意分享你在 devtools 中工作的语法吗? IE。如果我有 2 个文档,其中第一个文档 (_id= 1a) 具有 {"name": "Muhammad", "field1": "1a"} 并且第二个文档(_id= 1b) 具有{"name": "RC", " field1": "1a"},您是否有另一种可以在 devTools 中运行的方式/脚本,它只会返回第一个文档,因为 _id 的值与文档的 field1 的值匹配?谢谢
  • 对于这个东西,你需要使用带有多个匹配语句的布尔查询elastic.co/guide/en/elasticsearch/reference/current/…elastic.co/guide/en/elasticsearch/guide/current/bool-query.htmlstackoverflow.com/questions/35797544/…我想这就是你想要的。
  • 不要认为那些是我正在寻找的,我试图找到一种方法来进行比较而不知道 _id 是什么,它可以是任何东西而不是静态的,所以我试图找到一种动态的方式来说“给我一个索引中的所有文档,它们的_id与该字段(field1)中的值匹配”
猜你喜欢
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
  • 2016-08-07
  • 1970-01-01
  • 2023-04-05
  • 2017-04-06
  • 2013-05-26
  • 2013-05-03
相关资源
最近更新 更多