8

Lucene と Compass を使用していますが、問題があります。

          try {
      
       CompassHits hits = compassQuery.hits();
       for (CompassHit compassHit : hits) {
        if (results.size() >= maxResults) {
         Log.info(this, "Number of results exceeded %,d for query %s", maxResults, query);
         break;
        } else {
    
         results.add((T) compassHit.getData());
        }
       }
       

  } 

順調にデータがcompassHit.getData());100件ヒットしている場合再度検索を行うのですが、200件以上に変更する可能性はありますか?

編集:

wiki apache org から:

「すべてのヒットを反復処理すると、2 つの理由で時間がかかります。まず、Hits オブジェクトを返す search() メソッドは、100 を超えるヒットが必要な場合に内部で検索を再実行します」.

そして私の質問は、この値を「100」から「200」に変更する機会はありますか? しかし重要なのは、コンパスも生の Lucene も使用しないことです。

4

1 に答える 1

2

2.9.2 の Hits のソースを見ました。ハードコーディングされています。ハードコーディングされているようです

 Hits(Searcher s, Query q, Filter f) throws IOException {
    this.weight = q.weight(s);
    this.searcher = s;
    this.filter = f;
    this.nDeletions = countDeletions(s);
    getMoreDocs(50);
    this.lengthAtStart = this.length;
  }

Compass を使用していない場合は、Hits の JavaDoc の指示に従うことができます。

代わりに、たとえば TopDocCollector と TopDocs を使用できます。

  TopDocCollector collector = new TopDocCollector(hitsPerPage);
   searcher.search(query, collector);
   ScoreDoc[] hits = collector.topDocs().scoreDocs;
   for (int i = 0; i < hits.length; i++) {
     int docId = hits[i].doc;
     Document d = searcher.doc(docId);
     // do something with current hit
     ...

しかし、あなたがそうしているので、Compass の一部を書き直そうとしない限り、あなたは立ち往生していると思います

于 2011-05-11T19:13:50.947 に答える