1

Zendを使用していて、検索が必要です。Zendのドキュメントは素晴らしいものではないので、答えるのは簡単ですが、直接明白ではないいくつかの質問がありました。Luceneを使用してSQLデータベースを検索しています

  1. アイテムのインデックスをそのアイテムのテキストに関連付けるにはどうすればよいですか。それで、彼らがアイテムを検索して見つけた場合、どうすればそのインデックスを返すことができますか?私が知る限り、検索のテキストのみを返すことができます。

  2. すべてのデータを保持するアイテムをドキュメントに追加したが、ドキュメントはすでに作成されている場合、それは単にopen('document')、$ doc = new Doc()、$ doc-> addDocument()、commit( )?

  3. データベースに何かを追加するたびにLuceneドキュメントを更新することを理解しています。最適化では、何かを追加するたびに再最適化する必要がありますか?それは非効率的ですか?週に一度やるべきですか?

明らかな質問のように思われることをお詫び申し上げます。事前にご協力いただきありがとうございます。

4

2 に答える 2

2
  1. 'インデックスを作成し、取得する必要があります'-最終的に返されるものにインデックスを付ける必要があります。つまり、テキスト「FluxCapacitator」を検索するときにレコードID1389を返すことができるようにする場合は、あるフィールドにテキストがあり、別のフィールドにIDがあるドキュメントを保存する必要があります。idフィールドはインデックス付けする必要はありませんが、元に戻すことができるように保存する必要があります。
  2. 探しているのは「ドキュメントの更新」アクションです。Luceneには実際にはありません。最初にドキュメントを削除してから、更新された情報を含む新しいドキュメントを追加する必要があります。次に、項目1に戻り、そこに追加したidフィールドを取得して、インデックスを作成します(たとえば、キーワードとして)。これは、ドキュメントを削除するために、ドキュメントの一意の識別子として使用する必要があるためです。
  3. 素晴らしい質問です。これは、ユースケースに大きく依存します。サイト/データベースが比較的アイドル状態のときに、毎日「デッドタイム」がありますか?それが最適化の時です。そんな時間はありませんか?最適化を行わずに、パフォーマンスのわずかなペナルティ(たとえば、5〜10%)をとることができます。これは、 マージ係数を使用して軽減することもできます。

これが理にかなっていることを願っています。そうでない場合は、コメントで質問してください。

于 2009-09-06T06:28:35.967 に答える
0

ポイント3)は、Lucene 2.9で、SegmentReader +内部RamDirectoryの使用によって実装されたNRT( NearRealtimeSearch )として扱われます

OtisGospodneticwikiエントリを確認してください

于 2009-09-07T08:42:21.050 に答える