0

私はapacheluceneを使用してhtmlファイルのインデックスを作成しています。htmlファイルのパスをluceneインデックスに保存しています。インデックスを保存しているので、全部チェックしました。しかし、私がファイルのパスを検索しているとき、それは非常に高いドキュメントの数を返します。luceneインデックスに格納されているとおりの正確なパスを検索する必要があります。私は次のコードを使用しています

for index creation


   try{
         File indexDir=new File("d:/abc/")
        IndexWriter indexWriter = new IndexWriter(
             FSDirectory.open(indexDir),
            new SimpleAnalyzer(),
            true,
            IndexWriter.MaxFieldLength.LIMITED);
            indexWriter.setUseCompoundFile(false);
        Document doc= new Document();
        String path=f.getCanonicalPath();
          doc.add(new Field("fpath",path,
        Field.Store.YES,Field.Index.ANALYZED));
        indexWriter.addDocument(doc);
        indexWriter.optimize();
        indexWriter.close();
     }
    catch(Exception ex )
    {
     ex.printStackTrace();
    }



  Following the code for searching the filepath

        File indexDir = new File("d:/abc/");
           int maxhits = 10000000;
                     int len = 0;
                try {
                    Directory directory = FSDirectory.open(indexDir);
                     IndexSearcher searcher = new IndexSearcher(directory, true);
                    QueryParser parser = new QueryParser(Version.LUCENE_36,"fpath", new SimpleAnalyzer());
                    Query query = parser.parse(path);
                    query.setBoost((float) 1.5);
                    TopDocs topDocs = searcher.search(query, maxhits);
                    ScoreDoc[] hits = topDocs.scoreDocs;
                   len = hits.length;
                   JOptionPane.showMessageDialog(null,"items found"+len);

                 }
                catch(Exception ex)
               {
                 ex.printStackTrace();
              }

検索されたパスファイルが1回だけ存在するのに、見つかったドキュメントの数がドキュメントの総数として表示されます

4

1 に答える 1

1

パスを分析しているため、パスが別々の用語に分割されます。ルートパス用語(/ catalog / products / versionsのカタログなどすべてのドキュメントで発生する可能性が高いため、すべての用語を強制せずにカタログを含む検索では、すべてのドキュメントが返されます。

(上記の例を使用して)次のような検索クエリが必要です。

+catalog +products +versions

すべての用語を強制的に存在させます。

次のように、同じ用語のセットが異なる順序で発生する可能性がある場合、これはより複雑になることに注意してください。

/catalog/products/versions
/versions/catalog/products/SKUs

その場合、標準アナライザーのトークナイザーとは異なるLuceneトークナイザーを使用する必要があります。

于 2013-02-07T12:05:42.813 に答える