【问题标题】:Removing empty dynamic fields from a Solr 1.4 index从 Solr 1.4 索引中删除空动态字段
【发布时间】:2012-02-17 11:36:41
【问题描述】:

我有一个 Solr 索引,它使用了很多动态字段。我最近更改了我的代码以减少我们使用 Solr 索引的数据量,从而显着减少了正在使用的动态字段的数量。

我已重新索引我的数据,并且旧字段的文档计数(如管理架构浏览器中所示)已降至零。但我很困惑为什么这些领域仍然存在。我已经进行了优化,并重新启动了服务器,但我找不到任何关于是否有办法让这些字段消失的信息。

除非我从头开始创建索引,否则我现在是否坚持使用这些字段?我们谈论的是字段的显着减少(大约 200 -> 30),我担心保持它们浮动对性能的影响。

我正在使用 Solr 1.4。

编辑:动态字段定义仍然存在于 schema.xml 中,因为在少数情况下我仍在使用它们。只是基于它们的字段数量明显减少了。

编辑:

这些字段都不被存储,只被索引。所以我不能仅仅通过检查返回的文件来看到它们,但我可以对它们进行分面。

这是我对仍在使用的字段进行查询的结果...

查询:

/?q=*:*&facet=on&facet.field=books_isbn_10_s_exact

结果:

<lst name="books_isbn_10_s_exact">
    <int name="1010102457">2</int>
    <int name="1110011010">2</int>
    <int name="1110011013">2</int>
    ...

这是我对其中一个空的结果...

查询:

/?q=*:*&facet=on&facet.field=mobiles_infrared_s_exact

结果:

<lst name="mobiles_infrared_s_exact"/>

两个字段都在我的 schema.xml 中使用此字段定义:

<dynamicField name="*_s_exact"  type="string"  indexed="true"  stored="false" termVectors="true" omitNorms="true" multiValued="false" />

我看到旧字段(例如mobiles_infrared_s_exact 和大约100 个其他字段)的唯一地方是/admin/ 中的Solr 模式浏览​​器。在哪里我可以看到所有我曾经使用过的动态字段,即使其中大多数的文档计数为 0。

我只是想知道是否有办法从架构浏览器中删除它们,以及考虑到我有 1000 万个文档的索引,它们是否存在对性能的影响。

【问题讨论】:

  • 以防万一,您是否删除了架构中的动态字段声明?
  • 我没有,我仍然需要该领域的一些实例,但不是大多数。我将更新问题以澄清。
  • 那我不明白...你能告诉我们你在哪里看到这些不需要的字段吗?
  • 在管理员模式浏览器中,因此我可以看到文档计数为零。我可以看到索引中每个字段的列表,包括从动态字段定义生成的字段。并且不再使用的生成字段仍然出现在索引中,而我预计它们会在优化​​后被删除。
  • 尝试使用 TermsComponent (wiki.apache.org/solr/TermsComponent) 获取包含这些不需要的字段(及其值)的文档。

标签: solr


【解决方案1】:

当你这样做时会发生什么:

/?q=mobiles_infrared_s_exact:xyzzy

返回的文档为零还是出现错误?

【讨论】:

    【解决方案2】:

    经过几轮架构迁移后,我已经检测到多个 solr 内核的这种情况。您可以通过直接从 lucene 数据中提取来自动化它,例如:

    /solr/your_core/admin/luke?numTerms=0&amp;wt=json

    [
    // ...
    fields: {
     _version_: {
      type: "long",
      schema: "I-S-----OF------",
      index: "-TS-------------",
      docs: 761997
     },
     abstract_display: {
      type: "string",
      schema: "--S-M----------l",
      dynamicBase: "*_display"
     },
     abstract_t: {
      type: "text",
      schema: "ITS-M-----------",
      dynamicBase: "*_t"
     }
     //...
    }]
    

    然后通过非零 docs 计数过滤 fields。至于在模式浏览器中删除它们,我只能在迁移到新的 solr 安装或从头开始重建核心时才能做到这一点。可能还有其他方法,但它确实不是 Solr 设置来操纵的。它可能将跟踪视为内部工件。

    实际上,这更像是一个 solr 架构浏览器问题,而不是一个 solr 问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 2011-01-31
      • 2011-10-02
      相关资源
      最近更新 更多