如何检查elasticsearch脚本中的真实条件?

时间:2015-07-05 17:41:53

标签: elasticsearch

我有一个带有布尔字段的文档 说

 {
    "field1" : true
}

现在我想检查“field1”是否为true,如果为true则运行查询。 我怎样才能在Elasticsearch中使用脚本?

3 个答案:

答案 0 :(得分:4)

Daniel的方法优于使用脚本,因为它会明显更快,但如果您需要在脚本中执行此操作,那么您需要检查值是否已编入索引 'T''F'。在Elasticsearch 2.x及更高版本中,Lucene更改为使用更传统的10

ES 2.x(及以上):

{
  "query" : {
    "bool" : {
      "filter" : [ {
        "script" : {
          "inline" : "doc['field1'].value == 1"
        }
      } ]
    }
  }
}

ES 1.x:

{
  "query" : {
    "filtered" : {
      "filter" : {
        "script" : {
          "script" : "doc['field1'].value == 'T'"
        }
      }
    }
  }
}

使用脚本是一个坏主意,除非你被要求做一些在没有脚本的情况下无法完成的事情,例如同时与字段进行比较以确保它们具有相同的值。

答案 1 :(得分:1)

听起来您希望使用过滤后的查询,仅查询field1为true的文档。

如果您创建过滤后的查询,则应用过滤之前运行查询,因此您只会查询通过过滤器的文档,您可以按如下方式设置过滤后的查询。 / p>

{
  "query":{
    "filtered":{
      "query":{
        //Your query
      },
      "filter":{
        "term":{"field1":true}
      }
    }
  }
}

答案 2 :(得分:0)

您应该使用bool查询来匹配布尔条件。看看我的例子。

{
   "query" : {
      "bool" : {
         "must" : 
            {
            "term" : {
               "field1" : true
            }
         }            
      }
   }
}

希望它有所帮助!