优化Lucid / Solr以索引大型文本文档

时间:2011-08-19 18:06:44

标签: memory solr indexing

我试图在solr中索引大约300万个文本文档。这些文件中约有1/3是包含大约1-5段文本的电子邮件。其余的2/3文件每个句子只有几个单词。

Lucid / Solr花了近1个小时来完全索引我正在使用的整个数据集。我正试图找到优化这种方法的方法。我已经将Lucid / Solr设置为仅提交每100,000个文件,并且它一次批量索引文件为50,000个文件。内存不再是问题,因为它因为批处理而一直保持在1GB左右的内存。

最初必须对整个数据集编制索引。这就像遗留系统必须加载到新系统,因此数据必须被索引并且需要尽可能快,但我不确定要优化这些时间的哪些方面。

我在想,也许有很多像“a,a,因为,应该,如果......这样的小词”会导致很多开销而且只是“噪音”。我很好奇,如果我将它们切掉,如果它会大大加快索引时间。我一直在看Lucid文档,但我似乎找不到指定哪些单词不能索引的方法。我遇到了“停止列表”一词,但没有看到比传递它更多的参考。

还有其他方法可以让这个索引更快或者我只是停留了1小时的索引时间吗?

2 个答案:

答案 0 :(得分:1)

我们最近遇到了类似的问题。我们不能使用solrj作为请求和响应必须经过一些应用程序,因此我们采取以下步骤: Creating Custom Solr Type to Stream Large Text Field

  1. 使用GZipOutput / InputStream和Bse64Output / InputStream压缩大文本。这可以减少大约85%的文本大小,这可以减少传输请求/响应的时间。
  2. 减少客户端的内存使用量:

    2.1我们使用stream api(GSon stream或XML Stax)逐个阅读doc。

    2.2定义自定义Solr字段类型:FileTextField接受FileHolder作为值。 FileTextField最终会将读者传递给Lucene。 Lucene将使用阅读器阅读内容并添加到索引。

    2.3当文本字段太大时,首先将其解压缩到临时文件,创建FileHolder实例,然后将FileHolder实例设置为字段值。

答案 1 :(得分:0)

从您的查询中可以看出,索引时间对您的应用程序非常重要。 Solr是一个很棒的搜索引擎,但如果您需要超快的索引时间,并且这对您来说是一个非常重要的标准,那么您应该使用Sphinx搜索引擎。使用Sphinx快速设置和测试结果并不会花费太多时间。

可以有一些方法(比如你提到的那些,停止词等)来优化,无论你做什么索引时间Solr都无法击败Sphinx。我自己做了基准测试。

我非常喜欢Solr因为它的易用性,它的开箱即用的功能,如N-Gram Indexing,Faceting,Multi-core,Spelling Correctors以及它与其他apache产品的集成等等。但是当它到来时优化算法(无论是索引大小,索引时间等),狮身人面像摇滚!!

Sphinx也是开源的。试试吧。