2016-06-09 98 views
0

我正在使用ES 1.4。Elasticsearch facet size

我使用分页查询索引(在搜索查询中使用from和size以便每页有20个结果),并且我将搜索命中限制设置为100(所以我不能超过5页)

我想使用期限方面,但是数场是全球性的,它是在所有搜索命中其可以超过100

这是一个基本的例子:

{ 
    "from": 0, 
    "size": 20, 
    "query": { 
     "match_all": {} 
    } , "facets" : { 
    "tags" : { 
     "terms" : { 
      "field" : "tag" 
     } 
    } 
    } 
} 

有没有一种方法可以在ES小平面中设置一个限制来仅查看f首先100次点击?

谢谢!

回答

0

ElasticSeach提供了一个选项,用于将方面限制为由查询&过滤器返回的结果。 您可以将global参数设置为truefalse的每个方面。如果未指定值global设置为true。 既然你正在寻找只返回前100个结果,你应该一个limit过滤器应用于查询(limit filter documentation

尝试修改您的查询是这样的:

{ 
    "from": 0, 
    "size": 20, 
    "query": { 
     "filtered" : { 
      "filter" : { 
       "limit" : {"value" : 100} 
      } 
     } 
    }, 
    "facets" : { 
     "tags" : { 
      "terms" : { 
       "field" : "tag" 
      } 
      "global": false 
     } 
    } 
} 

如果你不想任何过滤器适用于你的数据,你可以尝试使用aggslimit filter documentation)内limit过滤器:

{ 
    "aggs": { 
    "limit_results": { 
     "filter": { 
     "limit": { 
      "value": 100 
     } 
     }, 
     "aggs": { 
     "tags": { 
      "terms": { 
      "field": "tag", 
      "size": 10 
      } 
     } 
     } 
    } 
    } 
} 

的第二个aggs内部的3210参数是返回的标签组的数量。缺省值是10documentation)。

让我知道这是否有帮助:)

+0

感谢您的回答。我尝试了限制过滤器,但是它限制了每个分片的文档数量,因此如果我有多个分片,相同的搜索查询可能会返回不同的结果 –