2017-06-30 62 views
0

我想在弹性2.X创建一个过滤索引别名elasticsearch范围和期限过滤

下给了我所有的少年,不分性别的。我只想看看这个过滤器中的女性。

这是我想创建索引的别名:

"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

回答

1

过滤器不能是一个数组,除非它被包含在“必须”的“bool”中。

以下过滤器正常工作:

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

我在这里猜测一点点,但根据Filtered Index Aliases文档,添加别名请求与filter context工作(而不是查询上下文)

试试这个:

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

我明白为什么这应该工作,但事实并非如此。当我添加后检索索引别名时,它只有第二个范围值作为过滤器而不是性别项。我已删除并重新创建,这是相同的结果。过滤器的第一部分在创建别名时被忽略。 – Kevin