Solr中如何对多个字段进行嵌套聚合?

2024-02-25

我正在尝试以嵌套方式按多个字段执行搜索结果聚合(计数和总和)。

例如,通过本文末尾显示的模式,我希望能够获得按“类别”分组并按“子类别”进一步细分的“大小”的总和,并得到如下所示的内容:

<category name="X">
  <subcategory name="X_A">
    <size sum="..." />
  </subcategory>
  <subcategory name="X_B">
    <size sum="..." />
  </subcategory>
</category>
....

我主要关注 Solr 的 Stats 组件,据我所知,它不允许嵌套聚合。

如果有人知道使用或不使用统计组件来实现此目的的某种方法,我将不胜感激。

这是目标模式的简化版本:

<types>
  <fieldType name="string" class="solr.StrField" />
  <fieldType name="text" class="solr.TextField">
    <analyzer><tokenizer class="solr.StandardTokenizerFactory" /></analyzer>
  </fieldType>
  <fieldType name="date" class="solr.DateField" />
  <fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" positionIncrementGap="0" />
</types>

<fields>
  <field name="id" type="string" indexed="true" stored="true" />
  <field name="category" type="text" indexed="true" stored="true" />
  <field name="subcategory" type="text" indexed="true" stored="true" />
  <field name="pdate" type="date" indexed="true" stored="true" />
  <field name="size" type="int" indexed="true" stored="true" />
</fields>

Solr 5.1中新的faceting模块可以做到这一点,它被添加到https://issues.apache.org/jira/browse/SOLR-7214 https://issues.apache.org/jira/browse/SOLR-7214

以下是如何将 sum(size) 添加到每个方面存储桶,并按该统计数据降序排序。

json.facet={
  categories:{terms:{
    field:category,
    sort:"total_size desc",  // this will sort the facet buckets by your stat 
    facet:{
      total_size:"sum(size)"  // this calculates the stat per bucket
    }
  }}
}

这就是在子类别的子方面添加的方式:

json.facet={
  categories:{terms:{
    field:category,
    sort:"total_size desc",
    facet:{
      total_size:"sum(size)",
      subcat:{terms:{ // this will facet on the subcategory field for each bucket
        field:subcategory,
        facet:{
         sz:"sum(size)"  // this calculates the sum per sub-cat bucket          
      }}
    }
  }}
}

因此,上面的内容将为您提供类别和子类别级别的总和(大小)。新方面模块的文档目前位于http://yonik.com/json-facet-api/ http://yonik.com/json-facet-api/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Solr中如何对多个字段进行嵌套聚合? 的相关文章

随机推荐

  • Android 连接到本地主机

    我试图通过 wamp 服务器将我的 Android 应用程序连接到本地主机 url 但它不起作用 我的目标是获取 json 数据并解析这些数据 对于我的测试 我使用的是设备而不是模拟器 并且我使用 AndroidManifest xml 中
  • 从函数内的 JSON 响应更新全局变量

    我正在尝试从 JSON 响应中获取一些变量并将其显示在自定义表视图中 问题是变量永远不会更新 更多解释是我的代码 func getAddresses let todosEndpoint String my link guard let to
  • 从 Ubuntu 10.10 升级到 12.04 后,multiprocessing.map 和 joblib 仅使用 1 个 cpu

    我有一些完美运行的 python 代码 它使用多处理模块并以 100 的速度加载我机器上的所有 8 个 CPU 当我从 Ubuntu 10 10 升级到 12 04 后 最明显的事情 也许我做了其他什么事情破坏了一切 它停止工作 经过大量调
  • neo4j cypher 单标签与多标签性能

    考虑以下示例 一个基于 Neo4j 的 wiki 其中包含大量文章和更多文章版本 所有编辑的历史记录 使用多个标签来标识每个节点有多大区别 article Article Public article Article Version 然后查
  • 使用CTE简化SQL语句

    我有一个如下查询 SELECT A a A b B c CASE WHEN THEN ELSE END AS CalculatedValue B d FROM dbo TableA A INNER JOIN dbo TableB B ON
  • 在 Django 表单字段之间显示一些自由文本

    我有一个如下所示的表格 class MyForm Form personal data firstname CharField lastname CharField education data university CharField m
  • 如何检查 dynamodb 中的字符串集中是否存在字符串

    我在表中的每个项目中都设置了一个字符串 例如 Title Book 101 Title ISBN 111 1111111111 Authors Author 1 Price 2 Dimensions 8 5 x 11 0 x 0 5 Pag
  • 如何处理“inspect.getsource”的限制 - 或者如何仅获取函数的源?

    我一直在玩inspectPython 标准库中的模块 下面的例子工作得很好 假设inspect已导入 def foo x y return x y print inspect getsource foo 将打印def foo x y n r
  • 任何自动保存文档版本的 Notepad++ 插件 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道有什么记事本 插件可以定期保存我正在处理的内容的版本吗 理想情况下 它会保存许多版本 并在标题
  • git 拒绝获取当前分支

    我设置了一个远程存储库 我可以将新的更改推送到它 但我无法从中获取 我总是收到 相当神秘的 错误消息 fatal Refusing to fetch into current branch refs heads master of non
  • geom_bar:颜色渐变和交叉影线(使用gridSVG),透明度问题

    使用真棒ggplot包 我想要一个条形图 其中fill美学被映射到一个连续变量 实际上是值 在它上面是一个纹理 实际上是条纹和交叉影线 颜色渐变很重要 因为它代表重要性 而纹理将显示类别 A B 以及它们的重叠 因此 对角线分别以一种方式
  • AttributeError:模块对象没有属性“Series”。代码可以在 iPython 中运行

    子模块不是隐含地进口的 并且必须是明确地声明 但我正在做一个explicit致电pd Series子模块 不是吗 无论如何 不 应该import pandas as pd允许pd Series被称为 下面的代码可以完美地工作iPython
  • 如何设置最小屏幕尺寸?

    我创建了新的应用程序 不适用于手机 我的应用程序基于 7 英寸平板设备 当我尝试将我的应用程序放入 Play 商店时 它显示我的应用程序支持 2000 种 Android 设备 但并非所有设备都是平板电脑 事实上 我不想用谷歌搜索所有设备并
  • 在 io.js 中使用 Smalloc

    第一个版本为io js https iojs org api smalloc html本月发布 我在阅读文档时发现smalloc https iojs org api smalloc htmlio js 中引入的新模块 直到今天我还从未觉得
  • 如何删除 Mercurial 中应用于错误分支的一些提交,然后在正确的分支上重播它们?

    我的同事在错误的分支上的存储库上提交了两次 采取这两个提交 删除它们然后将它们正确提交到正确的分支下的最有效方法是什么 更改尚未推送 理想情况下 我们希望有一种方法可以在 TortoiseHG 中执行此操作 但当然 如果命令行是最佳选择 我
  • 如何在 Vue 上下文中动态向条形图/饼图添加点?

    我想引导一个 Highcharts 条形图 然后向其中添加一些点 在 Vue 容器中 文档提到addPoint https api highcharts com class reference Highcharts Series addPo
  • 将unicode插入sqlite?

    我仍在学习 Python 作为一个小项目 我编写了一个脚本 它将获取文本文件中的值并将它们插入到 sqlite3 数据库中 但有些名称有奇怪的字母 我猜你会称它们为非 ASCII 并且当它们出现时会生成错误 这是我的小脚本 请告诉我是否有更
  • WPF 中 ListBoxItem 上的虚线边框

    如何将 ListBoxItems 上的默认边框设置为虚线边框 请参阅以下样式设置方法
  • 您知道哪些避免条件分支的技术?

    有时 CPU 花费大部分时间的循环经常会出现一些分支预测缺失 错误预测 概率接近 0 5 我见过一些关于非常孤立的线程的技术 但从未见过一个列表 我所知道的已经修复了条件可以转换为布尔值并且以某种方式使用 0 1 进行更改的情况 还有其他可
  • Solr中如何对多个字段进行嵌套聚合?

    我正在尝试以嵌套方式按多个字段执行搜索结果聚合 计数和总和 例如 通过本文末尾显示的模式 我希望能够获得按 类别 分组并按 子类别 进一步细分的 大小 的总和 并得到如下所示的内容