【问题标题】:Indexing texts with many numbers in Lucene在 Lucene 中索引具有许多数字的文本
【发布时间】:2011-01-19 09:47:43
【问题描述】:

可以为文本中的每个数字创建一个术语吗? 示例文本:

I got 2295910 unique terms.

数字可以是时间戳、端口号等。唯一编号导致大量唯一项。拥有与文档相同数量的唯一术语是不对的。 Lucenememory usage grows with the number of unique terms.

对于带有数字的文本,是否有特殊的分析器或技巧? StandardAnalyzer 为每个唯一数字创建一个术语。

需求:

这些数字应保持可搜索状态。一个文档中可能有多个数字。 内存使用是个问题。我在多个索引目录中有 800M 文档。 内存使用迫使我关闭最近最少使用的 IndexSearchers。

未经测试的想法:

  • 使用特殊的分析仪。它将数字分成块。 123456 将变为“123 456”。查询解析器将使用短语搜索来查找数字。
  • 更改 Lucene 代码以在查看数字术语时使用更大的 termInfosIndexDivisor。

也许我正在重新发明轮子。有人已经解决了吗?

【问题讨论】:

    标签: indexing lucene


    【解决方案1】:

    您目前是否有内存问题?确实,Lucene 内存使用量会随着唯一术语的数量而增长,但即使对于具有很多术语的索引来说,它仍然是一个相对微不足道的内存量。

    如果内存是个问题,并且您已经对代码进行了概要分析以确保确实是 Lucene 是问题所在,您可以创建另一个分析器来丢弃数字项。如果这样做,显然您将无法使用数字搜索文档。

    【讨论】:

    • 好的。我想在索引中有许多独特的术语是可以的。较大的 termInfosIndexDivisor 有助于减少内存使用量。
    【解决方案2】:

    正如 Bajafresh 所说:过早优化是万恶之源。但假设这真的是一个问题:

    一种选择是复制字段并分析一次丢弃数字,另一次丢弃除数字以外的所有内容,然后将后者索引为数字字段。数值字段具有special storage 机制,这意味着只会存储极少数唯一项(通常少于 256 个,以牺牲一些精度为代价)。

    当然,这意味着短语查询将不起作用,但其他类型的查询应该仍然没问题(假设您将查询解析器弄乱了足以让它工作)。

    【讨论】:

      【解决方案3】:

      答案取决于您的需求。

      您需要搜索这些字词吗?如果您需要搜索这些术语,那么这只是您的搜索索引的性质。如果您不需要搜索精确值(如范围搜索),您可以使用一些技巧,但如果您需要精确匹配,那么您将被困住。

      如果您不需要搜索这些术语,为什么要索引它们?

      【讨论】:

        猜你喜欢
        • 2011-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-12
        相关资源
        最近更新 更多