弹性搜索范围和术语过滤器

时间:2017-06-30 23:20:17

标签: elasticsearch

我正在尝试在Elastic 2.X中创建一个过滤的索引别名

以下给我所有青少年,不分性别。我只想在这个过滤器中看到女性。

这就是我尝试创建索引别名:

"add" : {
        "index" : "myindex",
        "alias" : "teenage_female",
        "filter" : 
        {
            "bool" : 
            {
                "must" : 
                [               
                    { "term": { "gender": "female" } },
                    { "range": { "age": { "gt": "12", "lt": "20" } } }
                ]
            }
        }
    }
}

我看过这个问题似乎是同样的答案,但我的JSON肯定有问题。

Elasticsearch connect range and term to same array item

2 个答案:

答案 0 :(得分:1)

过滤器不能是数组,除非它被包裹在" bool"与"必须"。

以下过滤器正常运行:

  "filter" : 
  {
    "bool" : 
    {
      "must" : 
      [
        { "term": { "gender": "female" } },
        { "range": { "age": { "gt": "12", "lt": "20" } } }
      ]
    }
  }

答案 1 :(得分:0)

我在这里猜一点,但根据Filtered Index Aliases文档,添加别名请求适用于filter context(与查询上下文相对)

试试这个:

"add" : {
    "index" : "myindex",
    "alias" : "teenage_female",
    "filter" : [               
         { "term": { "gender": "female" } },
         { "range": { "age": { "gt": "12", "lt": "20" } } }
     ]
}