2012-09-12 63 views
1

我想搜索在全文搜索中有空格的句子。Lucene.NET C中的空間問題#

例如:Tom is a very good boy in class. 我想搜索關鍵詞「非常好」。

我正在使用空白標記器來創建/搜索索引。但是如果它被空格分隔,它不會找到關鍵字。

代碼:

Query searchItemQuery = new WildcardQuery(new Term(string-field-name, searchkeyword.ToLower())); 

我試着分裂,但它不能正常工作。

有人建議我解決這個問題嗎?

感謝, 維傑

回答

2

因爲,你與標記化字符串的工作,每一個字都是一個獨立的術語。 爲了找到由多個詞組成的短語,您需要使用PhraseQuery而不是WildcardQuery。 像這樣:

PhraseQuery phraseQuery = new PhraseQuery(); 
phraseQuery.Add(new Term(string-field-name, "very")); 
phraseQuery.Add(new Term(string-field-name, "good")); 

還請注意,您所使用通配符查詢。詞組查詢中的通配符有點複雜。查看這篇文章的詳細信息:Lucene - Wildcards in phrases

最後,我建議考慮使用QueryParser,而不是手動構建查詢。

+0

在我的應用程序中,我需要支持通配符和聚合(和,或)。我認爲,短語查詢不支持所有這些事情。你有通配卡查詢的解決方案嗎?例如:查詢statusQuery =新的WildcardQuery(新術語(狀態ID,狀態)); urlQuery.Add(statusQuery,BooleanClause.Occur.MUST); xmlQuery.Add(groupQuery,BooleanClause.Occur.SHOULD); mainQuery.Add(urlQuery,BooleanClause.Occur.MUST); mainQuery.Add(xmlQuery,BooleanClause.Occur.MUST); –

+0

您總是可以通過BooleanQuery將PhraseQuery與其他查詢結合起來。 如果您需要在詞組查詢中使用通配符 - 請查看以上答案中的鏈接以獲取進一步指導。 –