2017-08-25 9 views
0

私はテキスト、単語ファイルを索引付けし、これらのファイル内のいくつかのコンテンツを検索しようとしています。特定の文字列を検索しても問題ありませんが、正規表現を使用して検索すると、それ以上は機能しません。以下では、説明するための重要なコードをいくつか挙げます。ルシェンでの検索に正規表現を使用できません

インデックス機能:私は、クエリを構築するためにqueryParseを使用しています

// FileBean is the class contains the file path, 
    // file content, file lastModified information 
    public void indexDoc(IndexWriter writer, FileBean t) throws Exception { 
    Document doc = new Document(); 
    System.out.println(t.getPath()); 
    doc.add(new StringField(LuceneConstants.PATH, t.getPath(), Field.Store.YES)); 
    doc.add(new LongPoint(LuceneConstants.MODIFIED, t.getModified())); 
    doc.add(new TextField(LuceneConstants.CONTENT, t.getContent(), Field.Store.NO)); 
    if (writer.getConfig().getOpenMode() == IndexWriterConfig.OpenMode.CREATE){ 
     writer.addDocument(doc); 
    } else{ 
     writer.updateDocument(new Term(LuceneConstants.PATH, t.getPath()), doc); 
    } 
} 

は、クエリは、単に数の '\ dの{16}' のようなRegexQueryになります。

検索機能

public static TopDocs getResults(IndexSearcher searcher, Query query) throws IOException { 
    TopDocs docs = searcher.search(query, 10); 
    return docs; 
} 

TopDocsのtotalHitは、私が何を期待されていない、0です。検索されるファイルがないようです。このコンテンツは、指定された正規表現を満たす必要があります。

私はグーグルで試してみましたが、まだ有効な解決策が見つかりませんでした。誰もtotalHitが0を返す理由についての提案を提供できますか?ありがとう。

答えて

0

OMG、私はついにその理由を見つけました。私は深い理由が分かっていませんでした。私は '\ d'の代わりに '[0-9]'を使用していました。それはOK !!!!!だろう 誰かがこれを説明できるなら、素晴らしい!!!!!

0

'+'を取り除くと、 '\ d {16}'になります。

+0

申し訳ありませんが、私は間違って貼り付けます。コードは/ \ d {16} /です。レギュラーはOKです。 – neal

関連する問題