0

lucene インデックスから検索しようとしていますが、この検索をフィルター処理したいと考えています。content と category の 2 つのフィールドがあります。「スポーツ」を含むファイルを検索したいとします。次のコードでこれを達成しようとしています。しかし、問題は、何百万ものレコードがある場合、ループの実行が原因で遅くなることです。タスクを達成する別の方法を提案してください。

try { File indexDir= new File("ファイルのパス")

           Directory directory = FSDirectory.open(indexDir);

                IndexSearcher searcher = new IndexSearcher(directory, true);
                int maxhits=1000000;
                QueryParser parser1 = new QueryParser(Version.LUCENE_36, "contents",

                  new StandardAnalyzer(Version.LUCENE_36));

          Query qu=parser1.parse("sport");

                TopDocs topDocs = searcher.search(, maxhits);
                ScoreDoc[] hits = topDocs.scoreDocs;


          len = hits.length;

       JOptionPane.showMessageDialog(null,"found times"+len);

                 int docId = 0;
                Document d;





 String category="";

int ctr=0,ctr1=0;

for ( i = 0; i<len; i++) {
docId = hits[i].doc;
d = searcher.doc(docId);
category= d.get(("category"));
if(category.equals("a"))
ctr++;
if(category.equals("b"))
ctr1++;


}

  JOptionPane.showMessageDialog("wprd found in category a times"+ctr);
   JOptionPane.showMessageDialog("wprd found in category b times"+ctr1);
  }

 catch(Exception ex)

 {

  ex.printStackTrace();
 }
4

1 に答える 1