2011-05-24 79 views
0

我需要能夠使用termDocs和Term's返回結果。我不返回任何結果時,我使用標準的分析,對其他分析儀任何想法avaliable執行所有的標準分析儀相同的操作,並返回使用類似字詞的搜索結果(例如條款而─的#define):Java Lucene:搜索包含非字母數字字符的術語

 analyser = new StandardAnalyser(Version.LUCENE_30); 
     reader = IndexReader.open(FSDirectory.open(IndexDir), true); 
     TermDocs td = reader.termDocs(); 
     QueryParser parserContents = new QueryParser(Version.LUCENE_30,field,analyser); 
     query = parserContents.parse(searchTerm); 
     docs = search.search(query, 100000); 
     ScoreDoc[] documents = docs.scoreDocs; 
     for(ScoreDoc match : documents) 
     { 
     td.seek(new Term(field,w)); 
     td.skipTo(match.doc); 
     hits = td.freq(); 
     } 

不過我做的當我嘗試使用queryparser而不是termdocs時得到結果。對於像#define(特殊字符#)這樣的術語,匹配在上述上下文中始終爲零。

+1

如果您可以顯示完整的代碼塊這有困難嗎?你如何得到上面的讀者?用哪個查詢條件?如http://lucene.apache.org/java/2_4_0/queryparsersyntax.html#Escaping%20Special%20Characters所述,您是否正確轉義? – Femi 2011-05-24 13:32:04

+0

@Femi:更新了我必須得到的讀者,但我認爲它更多的是標記,而索引或類似的東西影響特殊字符,就像我們沒有逃避# – remo 2011-05-24 13:54:52

回答

1

StandardAnalyzer做了大量的令牌預處理(它使用停止列表,刪除非字母字符,小寫字母等),以便可能會說明您在搜索結果中看到的內容。嘗試使用SimpleAnalyzer分析相同字段,或者甚至可以使用WhitespaceAnalyzer來查看您獲得的結果。這可能會給你足夠的結果經驗,以便知道這些分析器中的一個是否足夠,或者如何構建自己的指定您需要的確切標記操作。您可能還需要添加多個字段,並使用不同分析儀處理的相同值。這樣,例如,您可以搜索詞幹和非詞序化文本,包含或不包含停用詞的文本,包含或不包含特殊字符等。