如何以树(多维数组)的形式存储和检索 Apache Solr 字段?

2024-01-24

我需要将结果存储和检索为多维树,而不是平面“键”=>“值”对。让我用一个例子来解释,我有很多类别的产品,每个类别都有一个优先级值。样本结构:

{
  name: "Sample Product"
  categories: [
  {
    category: "Category 1",
    priority: 9
  },
  {
    category: "Category 2",
    priority: 5
  }
  ...
  ]
}

这是我的 data-config.xml:

<dataConfig>
  <dataSource name="ds" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/dbname" user="user" password="pass"/>

  <document name="products">
    <entity name="product" query="SELECT name FROM dbname.product">

      <field name="name" column="name" />

      <entity name="categories" query="SELECT category, priority FROM dbname.category WHERE product_id='${product.id}'">
        <field name="category" column="category" />
        <field name="priority" column="priority" />
      </entity>
    </entity>
  </document>
</dataConfig>

架构.xml:

<schema name="Products" version="1.1">
  <fields>
    <field name="name" type="string" indexed="true" stored="true" multiValued="false" required="true" /> 
    <field name="category" type="string" indexed="true" stored="true" multiValued="true" /> 
    <field name="priority" type="sint" indexed="true" stored="true" multiValued="true" /> 
  </fields>

  ...
</schema>

这是一个示例查询结果:

{
  "responseHeader": {
    "status": 0,
    "QTime": 14
  },
  "response": {
    "numFound": 45,
    "start": 0,
    "docs": [
      {
        "name": "Product Name",
        "category": [
          "Category 1",
          "Category 2"
        ],
        "priority": [
          8,
          6
        ]
      },
      ...

我想要的是这样的:

{
  "responseHeader": {
    "status": 0,
    "QTime": 14
  },
  "response": {
    "numFound": 45,
    "start": 0,
    "docs": [
      {
        "name": "Product Name",
        "categories": [
          {
            "name": "Category 1",
            "priority": 8
          },
          {
            "name": "Category 2",
            "priority": 6
          }
          ...
        ]
      },
      ...

因此,当我根据优先级对结果进行排序时,我不会失去类别和优先级之间的联系。因此,我可以在 PHP 中为每个产品选择前 1、2 或 3 个类别。否则我必须在 PHP 端进行一些自定义排序来选择我不想要的顶级类别。我想在 Solr 服务器上进行所有搜索和排序。

我正在使用 Apache Solr 4.5.1


Solr 只能维护数据的“平面”表示。你想做的事情实际上是不可能的。有许多解决方法,例如使用动态领域 https://stackoverflow.com/questions/16370466/solr-index-for-multi-valued-multi-type-field并使用solr加入 http://wiki.apache.org/solr/Join链接多个数据集。

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

如何以树(多维数组)的形式存储和检索 Apache Solr 字段? 的相关文章

  • Solr“实时”索引

    我知道有几个与此类似的问题 但它们没有为当前的问题提供简单的答案 抱歉 如果您觉得这是重复的 但我认为清晰易懂的答案将使很多人受益 那么 对于这个问题 Solr 索引更新可以自动化吗 如果可以的话 最佳方法是什么 这是一个简单的用例来澄清问
  • Apache Solr 6.6 替换文档而不是更新

    我已配置 solr 6 6 1 进行测试设置 在索引了一些文档后 我必须更新一些字段 我正在使用 python 客户端solr https pythonhosted org solrpy reference html 要更新 以下是我的代码
  • 在哪里可以找到 Apache Lucene/Solr 的性能基准

    是否有任何针对大型数据集上 Lucene Solr 性能基准的链接 资源 500GB 5TB以上范围的数据集 Thanks Lucene 提交者 Mike McCandless 运行基准 http people apache org mik
  • 对 SolrConfig.xml 文件的更新未得到反映

    我在 SolrConfig xml 文件中添加了一个新的请求处理程序 但是每当我尝试使用新的处理程序时 我都会收到带有 未知处理程序 错误的 404 修改SolrConfig xml文件时是否还需要修改其他文件 Thanks 您需要重新启动
  • 将 Nutch 爬虫与 Solr 结合使用

    我可以将 Apache Nutch 爬虫程序与 Solr 索引服务器集成吗 Edit 我们的一位开发人员从这些帖子中提出了一个解决方案 运行 Nutch 和 Solr http wiki apache org nutch RunningNu
  • solr 查询中的加号未正确处理

    All 我是 Solr 的新手 当我使用 solr 示例导入一些随机文档时 我在 q 中使用搜索查询 如下所示 fund report fund和 之间没有空格 我以为会在文档中搜索 fund report 这个词 这种情况在文档中很少发生
  • 如何配置 Magento Enterprise 使用 Solr 作为主要搜索引擎?

    我尝试寻找文档 但它非常稀疏 我编写了以下指南 希望它可以帮助人们节省 2 3 个小时的安装 设置和配置时间 与 MySQL 全文搜索标准设置相比 使用 Solr 带来的性能提升非常惊人 在您的 Magento 安装中让它工作绝对值得花时间
  • Solr距离过滤

    我正在尝试使用 Solr 进行距离范围搜索 我知道在5公里范围内进行搜索过滤很容易 q fq geofilt pt 45 15 93 85 sfield store d 5 我所追求的是如果我正在寻找一系列的说法 如何做同样的事情5至10公
  • 另一个日期时间问题

    我目前有一个这种格式的日期 2010 03 03 10 39 18 这是一个TIMESTAMPMySQL 中的字段 我需要为名为 Solr 的搜索引擎提供以下格式的日期 1995 12 31T23 59 59Z 以下是他们网站上有关日期的一
  • 如何使用 pysolr 对 solr 进行原子更新?

    我找不到关于如何使用 pysolr 更新 solr 的合适文档 截至 2014 年 11 月原子更新 https github com toastdriven pysolr commit c49be48d459448532b5ad0f505
  • 如何在不使用 SPLITSHARD 的情况下动态向 SolrCloud 添加节点?

    我已经设置了Solr云有 4 个碎片 我向 SolrCloud 添加了 8 个节点 4 个领导者和 4 个副本 每个节点运行在不同的机器上 但后来我发现我的数据越来越多 每天400万文件 这样我的 4 个分片就不够用了 因此 我想动态地向该
  • Solr MoreLikeThis 不适用于多个分片?

    我在 SolrCloud 中有 5 个节点集群 每个节点有 2 个分片 Solr版本 6 3 0 现在 当我运行 mlt 查询时 它仅返回每个节点的结果 并且不会将它们分布在所有分片 节点上 即 没有给出任何结果 给出结果 我什至尝试将其指
  • 客户端断开连接后 Solr 查询继续吗?

    我对 Solr 长期运行查询遇到的问题有一个理论 但我不知道它是否正确 也不知道如何测试它 我正在使用 cURL 从应用程序查询 Solr cURL 的配置方式是 如果 Solr 在 3 秒内未发送响应 它将放弃并断开连接 从而允许托管 c
  • Solr 您的意思是(拼写检查组件)

    我在我的应用程序中使用 solr 并集成了拼写检查组件 但我遇到了一些问题 第一的 当我输入一个用空格分隔的术语时 他们会给我每个术语的更正 Eg 水 gt 什么术语 但事实是watters 第二 当我输入一些带有错误术语的短语时 尽管其他
  • 我们可以同时使用拼音标记和同义词吗?

    我正在尝试同时启用语音分析器和同义词 这似乎不起作用 它们一起使用有错吗 在下面的实现中 我希望使用同义词转换搜索查询 然后使用语音分析器来检索结果 但我的同义词在这里完全被忽略了 如果我在创建索引时删除语音分析器 那么同义词就可以正常工作
  • Solr 动态价格范围和组

    跟进问题 如何获取 solr 结果中的方面范围 https stackoverflow com questions 33956 how to get facet ranges in solr results SolR 查询 价格范围 htt
  • Solrcloud Zookeper 设置:等待 4000ms 后未找到注册的领导者,集合:c1 切片:shard2

    我使用 solr 4 10 3 我通过 java 中的嵌入式 jetty 服务器启动 solr 我正在尝试使用 2 个分片 领导者 配置 solrcloud 我有一个外部动物园管理员设置 我在启动 solr 时指向动物园管理员实例 如下所示
  • Solr 索引时间提升 VS 查询时间提升?

    问题 1 我们可以只进行查询时间提升 使用 dismax 而不在索引时间提及提升值吗 问题 2 与查询时间提升相比 索引时间提升有何优点 缺点 反之亦然 查询时间和索引时间提升 在索引时 您可以选择提升特定文档 整个文档或仅一个字段 它作为
  • 由于未定义符号,PECL solr 未加载:curl_easy_getinfo

    我正在尝试加载 PECL solr 扩展 我尝试使用 pecl install solr 并下载并使用 phpize configure make 来安装它 在这两种情况下 扩展安装时都没有错误 但在 apache 重新启动后 或在命令行上
  • 索引后文件被锁定

    我的 网络 应用程序中有以下工作流程 从存档下载 pdf 文件 索引文件 删除文件 我的问题是 对文件进行索引后 它仍然处于锁定状态 并且删除部分会引发异常 这是我用于索引文件的代码片段 try ContentStreamUpdateReq

随机推荐

  • iPhone - UIView addSubview 顶部间隙

    我有一个加载到 MainWindow xib 中的视图 它只是一个带有 uiimageview 的视图 在整个屏幕 320 X 480 上显示图像 当应用程序加载时 我显示此视图 然后执行 self view addSubview tabb
  • WP7应用程序版本

    Windows Phone 7 应用程序似乎有两个带有版本号的位置 一个位于 AssemblyInfo cs 中 通过AssemblyVersion AssemblyFileVersion属性 另一个是 WMAppManifest xml
  • 如何自定义Boost.Log的“TimeStamp”格式

    我想得到年 月 日时 分 秒 分数 2位数字 如果我使用 Y m d H M S f 我几乎得到了什么我想要秒的小数部分 最后一部分 例外 它在我的 Windows XP 上显示 6 位数字 我不知道如何只获取 2 位数字 知道吗 我正在用
  • 创建 Log4j Logger 的开销是多少

    我的应用程序中有一些 Web 服务 我想根据 Web 服务名称将它们记录到不同的文件中 为此 我正在创建记录器 myLogger Logger getLogger logKey 我想知道是否应该缓存这些记录器以避免为每次调用创建它们 或者我
  • python 如何在“for”循环中处理对象实例化

    我有一个非常复杂的课程 class C pass 我有这个测试代码 for j in range 10 c C print c 这使 lt main C instance at 0x7f7336a6cb00 gt lt main C ins
  • Gradle Eclipse WTP:War 文件包含在另一个 war 文件中

    我有两个网络 战争 项目 A 和 B B 取决于 A 当我构建 B 时 A 按预期作为 A jar 包含在 B 的 WEB INF 中 我还使用 Gradle 的 eclipse 和 eclipseWtp 插件来生成 Eclipse 项目
  • 将分类器投入生产

    我已经使用 joblib 保存了分类器管道 vec TfidfVectorizer sublinear tf True max df 0 5 ngram range 1 3 pac clf PassiveAggressiveClassifi
  • 如何在 C++ 中使用 gnuplot?

    我想用 C 程序生成的 x y 点绘制一些图形 我可以从终端通过 gnuplot 命令成功绘制这些数据 但我想从 C 程序中绘制同样的东西 这在 ubuntu 16 04 lts 中可能吗 当然 只需使用标准包命令安装 gnuplot su
  • 这会导致C++内存泄漏吗?

    我对 C 内存管理有疑问 这 显然 与引用和指针有关 假设我有一堂课Class用一种方法my method OtherClass Class my method OtherClass other object new OtherClass
  • 按标签过滤和选择

    如何通过选择和忽略标签来获取最新的指标 例如 以下查询 last over time application version site NYC instance Test id 1h 返回以下项目 application version i
  • 使用 Jersey 客户端的连接池

    我对泽西岛很陌生 我进行了搜索 但无法弄清楚是否有办法进入泽西客户 to use 连接池而不是每次发送新请求时都创建连接 整个想法是重用池中的连接集 这将节省大量资源 仅供参考 我不是在寻找连接 保持活动状态 这就是我现在正在做的事情 pu
  • 使用约束 B 样条线近似形状轮廓

    我正在寻找一种生成约束样条线的可能性 以近似形状 在我的例子中 是足迹轮廓 作为原始数据 我有一个包含数百个 xy 坐标对的表 这些坐标是从足迹边界收集的 样条曲线应该只近似数据点 样条曲线不需要通过数据点 我希望能够在一定程度上平滑样条线
  • {m}{n}(“正好n次”两次)是如何工作的?

    所以 以某种方式 玩弄 我发现自己有一个正则表达式 比如 d 1 2 从逻辑上讲 对我来说 这应该意味着 一个数字恰好一次 恰好两次 即一个数字正好两次 但事实上 它似乎只意味着 一个数字恰好一次 因此忽略了 2 String regex
  • 如何在 PHP 中创建受密码保护的存档文件?

    我需要能够使用 PHP 创建带有密码保护的存档 zip 文件 我正在使用 Laravel 5 4 和 PHP 7 1 版本 我看了这个链接here http php net manual en class ziparchive phpPHP
  • 未调用导航栏约 8 像素内的触摸事件

    我有一个带有三个按钮的应用程序 实际上UIView s 水平放置下导航栏 这三个按钮的尺寸足够大 例如 比后退按钮大 但是当点击大致位于顶部三分之一部分时 它们不会响应触摸 我知道导航栏正下方的这个区域是为后退按钮和其他 UINavigat
  • iPhone 上的滚动 div 无需使用 2 个手指?

    我的 iPhone 应用程序中嵌入了 UIWebView 我希望始终在页面上保留锁定的页眉和页脚 DIV 并具有可滚动的中心 DIV 我知道我可以使用 UIView 控件的页眉 页脚来做到这一点 但我希望页眉和页脚是 HTML div 因为
  • rollup 是否将node_modules 捆绑到bundle.js 中?

    我正在试驾rollupjs https rollupjs org using rollup with npm将节点应用程序打包成bundle js我很困惑 rollup 是否支持捆绑全节点应用程序 包括node modules 或者只是项目
  • Kubernetes 中 Docker 容器内的互联网连接

    我有一个基于 jenkins slave 容器的 Kubernetes pod 我在特权模式下安装了 docker 套接字和 docker 二进制文件以及必要的内核模块 在该 pod 内 我构建了 Docker 镜像 并在该镜像上运行 do
  • 使用 xlrd 在 Python 3 中将 xls 转换为 csv

    我使用带有 xlrd 和 csv 模块的 Python 3 3 将 xls 文件转换为 csv 这是我的代码 import xlrd import csv def csv from excel wb xlrd open workbook M
  • 如何以树(多维数组)的形式存储和检索 Apache Solr 字段?

    我需要将结果存储和检索为多维树 而不是平面 键 gt 值 对 让我用一个例子来解释 我有很多类别的产品 每个类别都有一个优先级值 样本结构 name Sample Product categories category Category 1