1

Sphinx Search Serverを使用して、非常に大きなファイル (約 14 GB) のインデックスを作成しようとしています。ファイルは空白で区切られ、1 行に 1 エントリです。

Sphinx で使用できるようにするには、xml ファイルを Sphinx サーバーに提供する必要があります。コンピューターを殺さずにそれを行うにはどうすればよいですか?

最善の戦略は何ですか?メインファイルをいくつかの小さなファイルに分割しようとする必要がありますか? それを行う最良の方法は何ですか?

注: 私は Ruby でそれを行っていますが、他のヒントに対しては完全にオープンです。

御時間ありがとうございます。

4

3 に答える 3

0

主なアイデアは、結果XMLを生成しながら、メインファイルを1行ずつ解析することだと思います。そして、それが十分に大きくなるたびに、それをスフィンクスに供給します。すすぎ、繰り返します。

于 2012-08-14T09:55:10.483 に答える
0

質問の後で解決策を書かない人は嫌いです。だから私はそれらの1つにならないようにします、うまくいけばそれは誰かを助けるでしょう。

単純なリーダーメソッドを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 に答える
0

どのような解析を行う必要がありますか? 変換が入力で一度に 1 行だけに制限されていて、複雑すぎない場合は、Ruby の代わりにawkを使用します...

于 2012-08-14T13:00:15.097 に答える