1

私は非常に大きな転置インデックス用語の作成に取り組んでいます。どのような方法を提案しますか?

初め

termId - > docId
  a        doc2[locations],doc5[locations],doc12[locations] 
  b        doc5[locations],doc7[locations],doc4[locations] 

2番

termId - > docId
  a        doc2[locations]
  a        doc5[locations]
  a        doc12[locations]
  b        doc5[locations]
  b        doc7[locations] 
  b        doc4[locations]  

psLuceneはオプションではありません

4

1 に答える 1

1

適切なテーブルの設計は、データの使用を計画する方法によって異なります。そのままのように文字列を使用することを計画している場合"doc2[locations],doc5[locations],doc12[locations]" 、それ以上後処理を行わずに、First設計に問題はありません。

doc2[locations]しかし、質問が暗黙のうちに示唆しているように、、doc5[locations]などを個別のエンティティと見なしたい場合は、必ずSecondデザインを使用する必要があります。

Secondデザインが優れている理由を示すいくつかのユースケースを次に示します。

  • を使用Firstしてすべてのドキュメントを要求するとtermID = a、そのような文字列が返さ doc2[locations],doc5[locations],doc12[locations]れ、分割する必要があります。

    Secondを使用すると、各ドキュメントが個別の行として取得されます。分割なし!

    Second構造がより便利です。

  • または、ある時点でdoc5[locations]変更があり、テーブルを更新する必要があるとします。Firstこのデザインを使用する場合は、比較的複雑なMySQL文字列関数を使用して、それを含むすべての行の部分文字列を見つけて置き換える必要があります。(MySQLには正規表現置換が組み込まれていないことに注意してください。)

    デザインを使用する場合Second、更新は簡単です。

    UPDATE table SET docId = "newdoc5[locations]" where docId = "doc5[locations]"
    
于 2012-10-27T12:30:46.380 に答える