我有一个带有布尔字段的文档 说
{
"field1" : true
}
现在我想检查“field1”是否为true,如果为true则运行查询。 我怎样才能在Elasticsearch中使用脚本?
答案 0 :(得分:4)
Daniel的方法优于使用脚本,因为它会明显更快,但如果您需要在脚本中执行此操作,那么您需要检查值是否已编入索引 'T'
或'F'
。在Elasticsearch 2.x及更高版本中,Lucene更改为使用更传统的1
和0
。
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
}
}
}
}
}
希望它有所帮助!