当前位置: 首页 > 知识库问答 >
问题:

Filter facet返回所有文档的计数而不是范围

祝俊雄
2023-03-14

我正在使用Elasticsearch和Nest为特定时间范围内的文档创建查询,并执行一些筛选方面的操作。查询如下所示:

{
  "facets": {
    "notfound": {
      "query": {
        "term": {
          "statusCode": {
            "value": 404
          }
        }
      }
    }
  },
  "filter": {
    "bool": {
      "must": [
        {
          "range": {
            "time": {
              "from": "2014-04-05T05:25:37",
              "to": "2014-04-07T05:25:37"
            }
          }
        }
      ]
    }
  }
}

在具体情况下,搜索的总点击量为21个文档,这符合ElasticSearch中该时间范围内的文档。但是“NotFound”方面返回38,这符合StatusCode值为404的ErrorDocuments的总数。

根据我对文档的理解,facets通过搜索收集数据。在这种情况下,“NotFound”方面永远不能返回高于21的计数。

我在这里做错了什么?

共有1个答案

傅阳
2023-03-14

filter/query/filtered_query/facet过滤器之间有明显的区别,这一点很好地了解。

顶层过滤器

{
    filter: {}
}

这充当后筛选器,这意味着它将在查询阶段结束后筛选结果。由于分面是查询阶段的一部分,过滤器不会影响被分面的文档。过滤器不会改变分数,因此非常可缓存。

{
    query: {}
}

查询会影响文档的得分,因此,查询的可缓存性不如筛选器。查询在查询阶段运行,因此也会影响被分面的文档。

过滤查询

{
    query: {
        filtered: {
           filter: {}
           query: {}
        }
    }
}

这允许您在查询阶段运行筛选器,利用它们更好的可缓存性,并让它们影响被分面的文档。

刻面滤波器

"facets" : {
    "<FACET NAME>" : {
        "<FACET TYPE>" : {
            ...
        },
        "facet_filter" : {
            "term" : { "user" : "kimchy"}
        }
    }
}
{
    "facets" : {
        "wow_facet" : {
            "query" : {
                "term" : { "tag" : "wow" }
            }
        }
    }
}

令人困惑的是,过滤器方面是在搜索对象上使用.facetfilter()指定的。我将在1.0中更改这一点,以避免将来的混乱。

遗憾的是:嵌套中的.facetfilter().facetquery()不允许您像使用其他方面那样指定方面过滤器:

var results = typedClient.Search<object>(s => s
    .FacetTerm(ft=>ft
        .OnField("myfield")
        .FacetFilter(f=>f.Term("filter_facet_on_this_field", "value"))
    )
);
 类似资料:
  • 在RoboMongo(0.9.0-RC09)中运行以下mongo查询会给出正确的文档数量(使用游标计数函数),而迭代所有文档只会返回一小部分文档: 我们是否需要专门配置查询以返回所有文档?

  • 问题内容: 我想知道为什么搜索特定术语会返回索引的所有文档,而不返回包含所请求术语的文档。 这是索引以及我的设置方法:(使用elasticsearch头插件浏览器界面) 然后我添加了一些文档: 因此,现在触发“ plaat”搜索时,人们会希望搜索会返回包含“ plaatstaal”的文档。 但是为我节省了更多的搜索,elasticsearch会恢复所有文档的大小,无论其文本内容如何。我在这里想念什

  • 问题内容: 我有这行代码(总是返回1): 其中token [“ rows”]是: 我想对组件数量进行计数。 这也不起作用: 整个JSON在这里: 问题答案: 根据您在另一个答案中的评论,我现在可以了解您为什么感到困惑。您没有在问题中提到正在执行XML到JSON的转换。 如您所知,XML不像JSON那样具有“对象”或“数组”的概念。在XML中,所有内容都只是命名节点的集合。在确定某个东西应该是数组还

  • 我正在查询URI以从web服务获取一些数据。那很好。但我注意到,我的json hase多页的page\u计数,但只返回第一页数据。 以下是json的样子: 如何返回所有页面而不是只返回第一页?我知道这可能不是个好主意,但我该怎么做? 更新:web服务的URI类似于: 谢谢

  • 我试图让2支球队互相比赛。当我说团队1.玩(团队2)时,我称之为;当 i 生成的数字小于 0.5 时,team2 应获胜,如果大于 0.5,则团队 1 应获胜。当团队 1 获胜时,它会正确显示为尼克斯,但当团队 2 获胜时,它会显示内存地址。我怎么能让它正确地说网是赢的,而不是team@78987neu73

  • 假设我有这个给定的数据 当我搜索最喜欢丰田车的人时,每当我查询这个数据时,它都会返回这个数据 结果是两个名为ABC的记录。如何只选择不同的文档?我想得到的结果只有这个 这是我的问题 我正在使用ElasticSearch 1.0.0。使用java api客户端