2017-05-04 89 views
2

我很难找出如何使用带有过滤器的elsticsearch dis_max查询。Elasticsearch:如何使用带有过滤器的dismax查询

当我这样做:

{ 
    "query": { 
     "dis_max": { 
      "queries": [{ 
       "multi_match": {} 
      }, 
      { 
       "multi_match": {} 
      }], 
      "filter": { 
       //Term filter 
      }   
     } 
    } 
} 

它说[dis_max]查询不支持[过滤器]。但我可以使用dis_max查询和过滤的别名。例如:我使用下面定义的过滤器创建了一个别名,并在执行dis_max查询时使用它,并且它完美地工作。

{ 
    "add" : { 
     "index" : "test1", 
     "alias" : "alias1", 
     "filter" : { //Term filter } 
    } 
} 

因此,应该有一些方法可以实现这一点,而无需创建别名。任何人都可以请告诉我该怎么做。

+0

' “multi_match”:{},' - >' “multi_match”:{}' – RoiHatam

回答

2

如果有人正在寻找答案,我最终在必须类中使用了带有dis_max查询的bool查询,并简单地将其作为bool查询的过滤器部分进行过滤。

例:

{ 
    "query": { 
     "bool": { 
      "must": { 
       "dis_max": { 
        "queries": [{ 
         "multi_match": {} 
        }, 
        { 
         "multi_match": {} 
        }] 
       } 
      } 
      "filter": { 
       //Term filter 
      }   
     } 
    } 
}