从Solr 1.4索引中删除空的动态字段

4
我有一个使用了很多动态字段的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" />

我只在Solr的模式浏览器(/admin/)中看到旧字段(例如mobiles_infrared_s_exact和其他约100个字段)。在那里,我可以看到我曾经使用过的所有动态字段,尽管大多数字段的文档计数为0。
我只是想知道是否有办法从模式浏览器中删除它们,以及它们是否会对性能产生影响,考虑到我有一个包含1000万个文档的索引。

你的模式中是否删除了动态字段声明? - Mauricio Scheffer
我还没有,我仍然需要一些字段的实例,只是不需要大部分。我会更新问题以澄清。 - Andrew Ingram
在管理模式浏览器中,因此我可以看到文档计数为零。我可以看到索引中每个字段的列表,包括从动态字段定义生成的字段。而且,已不再使用的生成字段仍然出现在索引中,尽管我希望它们在优化后被删除。 - Andrew Ingram
@MauricioScheffer 我已经在问题中添加了一些额外的信息。 - Andrew Ingram
1
尝试使用TermsComponent(http://wiki.apache.org/solr/TermsComponent)获取具有这些不需要的字段(及其值)的文档。 - Mauricio Scheffer
显示剩余2条评论
2个回答

0

当你做类似这样的事情时会发生什么:

/?q=mobiles_infrared_s_exact:xyzzy

你是收到零个文档还是出现了错误?

0
我在多个Solr核心中检测到了这个问题,经过几轮模式迁移后。您可以通过直接从Lucene数据中提取来自动化它,例如: /solr/your_core/admin/luke?numTerms=0&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问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接