是否可以为文本中的每个数字创建一个术语? 示例文本:
I got 2295910 unique terms.
数字可以是时间戳,端口号,任何东西。唯一的数字导致了大量独特的术语。拥有与文档相同数量的唯一术语是不对的。 Lucene memory usage grows with the number of unique terms。
对于有数字的文本,是否有特殊的分析器或技巧? StandardAnalyzer为每个唯一编号创建一个术语。
需求:
这些数字应保持可搜索状态。文档中可能有多个数字。 内存使用是个问题。我在多个索引目录中有800M文档。 内存使用情况迫使我关闭最近最少使用的IndexSearchers。
未经考验的想法:
也许我正在重新发明轮子。它已经被某人解决了吗?
答案 0 :(得分:3)
您目前是否有内存问题?确实,Lucene的内存使用量随着独特术语的数量而增长,但即使对于有很多术语的索引,它仍然是相对微不足道的内存量。
如果内存存在问题并且您已经分析了代码以确保Lucene确实存在问题,那么您可以创建另一个抛出数字术语的分析器。如果这样做,显然,您将无法使用数字搜索文档。
答案 1 :(得分:1)
正如Bajafresh所说:过早优化是万恶之源。但假设这确实是一个问题:
一种选择是复制字段并分析一次抛出数字,另一种选择抛出除数字之外的所有内容,然后将后者索引为数字字段。数字字段具有special storage机制,这意味着只存储很少的唯一术语(通常少于256,代价是精确度)。
当然,这意味着短语查询不起作用,但其他类型仍然可以正常使用(假设你弄乱了查询解析器足以让它工作)。
答案 2 :(得分:1)
答案取决于您的需求。
您需要搜索这些条款吗?如果您需要搜索这些条款,那么这只是搜索索引的性质。如果你不需要搜索确切的值(比如范围搜索),你可以做一些技巧,但如果你需要完全匹配,那么你就会陷入困境。
如果您不需要搜索这些术语,为什么要将它们编入索引?