2017-08-25 51 views
0

我想索引文本,單詞文件並搜索這些文件中的某些內容。當我搜索一個特定的字符串時可以,但是當我嘗試使用正則表達式進行搜索時,它將不再起作用。在下面,我將列出一些關鍵的解釋代碼。不能使用正則表達式在lucene中搜索

的指數函數:

// 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); 
    } 
} 

我使用queryParse建立查詢,查詢將是一個RegexQuery就像 '\ d {16}' 了許多。

搜索功能

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

TopDocs的totalHit是0,這是不是我所期望。在我看來,沒有文件被搜索。此內容應滿足提供的給定正則表達式。

我試過Google搜索它,但仍然沒有找到有效的解決方案。任何人都可以提供任何建議爲什麼totalHit返回0?謝謝。

回答

0

OMG,我終於找到原因了。雖然我不知道什麼是深層原因。我發現如果我使用'[0-9]'而不是'\ d'。這將是好的! 如果有人能解釋這一點,那將是美好的!

0

試着拿走'+',所以它會是'\ d {16}'。

+0

對不起,我貼錯了。代碼只是/ \ d {16} /。常規是好的。 – neal