3

indexsearcher.search() 関数によって返される "Hits" オブジェクトのサイズを小さくするにはどうすればよいですか?

現在、私は次のようなことをしています:

Hits hits = indexSearch.search(query,filter,...);

Iterator hitsIt = hits.iterator();
int newSize=0;
while (hitsIt.hasNext()){
   Hit currHit = (Hit)hitsIt.next();

   if (hasPermission(currHit)){
      newSize++;
   }
}

ただし、これは、ヒット数が多い場合 (500 以上など)、パフォーマンスに大きな問題を引き起こします。

「HitsCollector」または「Collector」と呼ばれるパフォーマンスの向上に役立つと思われるものについて聞いたことがありますが、その使用方法がわかりません。

誰かが私を正しい方向に向けることができれば幸いです。

Atlassian Confluence Web アプリケーション内のインデックス作成には Apache Lucene を使用しています。

4

2 に答える 2

2

コレクターは、ドキュメントがヒットするたびに呼び出される単純なコールバック メカニズムです。次のようなコレクターを使用します。

public class MyCollector extends HitCollector {

// this is called back for every document that 
// matches, with the docid and the score

public void collect(int doc, float score){

    // do whatever you have to in here

}
}

..

HitCollector collector = new MyCollector();

indexSearch(query,filter,collector);
于 2012-07-14T22:12:25.530 に答える
1

良好なパフォーマンスを得るには、各ドキュメントとともにセキュリティ情報をインデックス化する必要があります。もちろん、これはセキュリティ モデルによって異なります。たとえば、各ドキュメントを権限を持つセキュリティ ロールに割り当てることができる場合は、それを使用します。この質問もチェックしてください。あなたのものはほとんどそれの複製です。

于 2012-03-30T11:10:23.797 に答える