2014-12-31 110 views
0

ElasticSearch中有没有一种方法可以运行布尔过滤器,然后不进一步重新搜索搜索,根据multi_field查询对结果进行排序/排序?然后按ElasticSearch中的查询对结果进行排序

如:获取与status_id = 1(过滤器)的所有项目,然后通过使用关键字“红车”(文档,其namedescription包含这些关键字第一,文档,而在后的)命令的文档。

回答

1

您可以使用布尔查询 - 按条件应当的 -

子句(查询)应该会出现匹配的文件内。在没有must子句的布尔查询中,一个或多个should子句必须与文档匹配。可以使用minimum_should_match参数设置要匹配的最少的子句数。

在我们的案例中,因为必须和它的数字匹配,所以不会计算得分值。但随后应条件将被用于单独计算得分 -

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "match": { 
      "status_id": 1 
      } 
     } 
     ], 
     "should": [ 
     { 
      "multi_match": { 
      "query": "red car", 
      "fields": [ 
       "subject", 
       "message" 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 
+0

实际上,我是这样做的,减一两件事,我是做了“必须”作为过滤器,而不是查询的一部分。结果,应该是本身,并正在减少结果集。 – Ian

相关问题