1

我正在尝试使用Sphinx 搜索服务器来索引一个非常大的文件(大约 14gb)。该文件以空格分隔,每行一个条目。

为了能够将它与 Sphinx 一起使用,我需要向 Sphinx 服务器提供一个 xml 文件。我怎样才能在不杀死我的电脑的情况下做到这一点?

什么是最好的策略?我应该尝试将主文件拆分为几个小文件吗?最好的方法是什么?

注意:我是用 Ruby 做的,但我完全愿意接受其他提示。

谢谢你的时间。

4

3 回答 3

0

我认为主要思想是逐行解析主文件,同时生成结果 XML。每次它变得足够大时,就可以将它喂给狮身人面像。冲洗并重复。

于 2012-08-14T09:55:10.483 回答
0

你需要做什么解析?如果转换一次仅限于输入中的一行并且不太复杂,我会使用awk而不是 Ruby ...

于 2012-08-14T13:00:15.097 回答
0

我讨厌那些在提出问题后不写解决方案的人。所以我会尽量不要成为他们中的一员,希望它会对某人有所帮助。

我向 File 类添加了一个简单的读取器方法,然后使用它根据我选择的块大小循环文件。实际上很简单,就像 Sphinx 的魅力一样。

class File

  # New static method
  def self.seq_read(file_path,chunk_size=nil)
    open(file_path,"rb") do |f|
      f.each_chunk(chunk_size) do |chunk|
        yield chunk
      end
    end
  end

  # New instance method
  def each_chunk(chunk_size=1.kilobyte)
    yield read(chunk_size) until eof?
  end

end

然后像这样使用它:

source_path = "./my_very_big_file.txt"
CHUNK_SIZE  = 10.megabytes
File.seq_read(source_path, CHUNK_SIZE) do |chunk|
  chunk.each_line do |line|
    ...
  end
end
于 2012-09-28T15:20:24.460 回答