相关疑难解决方法(0)

ElasticSearch聚合:每个聚合排除一个过滤器

我想过滤掉字段'A'等于'a'的文档,我想同时面对字段'A',当然不包括前一个过滤器.我知道您可以将过滤器放在查询"外部",以便在没有应用过滤器的情况下获取构面,例如:

ElasticSearch

{
   "query : { "match_all" : { } },  
   "filter" : { "term : { "A" : "a" } },
   "facets" : { 
      "A" : { "terms" : { "field" : "A" } }  //this should exclude the filter A:a
   }
}
Run Code Online (Sandbox Code Playgroud)

SOLR

&q=:*:*
&fq={!tag=Aa}A:a
&facet=true&facet.field={!ex=Aa}A
Run Code Online (Sandbox Code Playgroud)

这是非常好的,但如果我有多个过滤器和方面,每个过滤器应该相互排斥,会发生什么?例:

filter=A:a
filter=B:b
filter=C:c

facet={exclude filter A:a}A
facet={exclude filter B:b}B
facet={exclude filter C:c}C
Run Code Online (Sandbox Code Playgroud)

也就是说,对于方面,AI希望保留除A:a之外的所有滤波器,对于小平面B除了B:b之外的其他所有滤波器,依此类推.最明显的方法是进行n个查询(每个n个方面各一个),但我想远离那个.

faceted-search elasticsearch

7
推荐指数
1
解决办法
1516
查看次数

在弹性搜索中计算*Facet Counts*的有效方法

我想为facet查询UI计算facet计数,但我想我错过了一些东西,因为我无法使用facet过滤器得到我需要的数字.

这是一个例子.给出两个方面,每个方面有三个可能的术语:

Colors: {red, yellow, blue}
Notes: {do, re, mi}
Run Code Online (Sandbox Code Playgroud)

当我进行搜索时,构面中每个术语的计数不会考虑另一个方面中设置的过滤器.

为了显示:

[ ] All colors (18)
 [x] Red (10)
 [ ] Green (5)
 [ ] Blue (3)

[ ] All notes (18)
 [ ] Do (5)
 [x] Re (7)
 [ ] Mi (6)
Run Code Online (Sandbox Code Playgroud)

请注意,每个方面内的总计总和为查询的总命中数,就像没有设置过滤器一样.

我想要的行为是让Notes facet中的数字考虑到Colors facet中的过滤器,反之亦然.也就是说,注释术语的数字应该总和为10(以匹配红色滤波器),而不是18.

有趣的是,文档中的示例屏幕截图使用了Linked In中的一个示例,它实际上演示了我想要的行为.

http://www.elasticsearch.org/guide/reference/api/search/facets/

我能够通过为每个方面的每个术语手动重新提交一次查询来获得我想要的结果(呃)但是我想知道是否有办法通过更改我的查询获得与开箱即用的开箱即用相同的行为.

faceted-search elasticsearch

3
推荐指数
1
解决办法
2026
查看次数

标签 统计

elasticsearch ×2

faceted-search ×2