2
我需要從字符串中提取單個詞語以使用BooleanQuery
構建查詢。 我使用QueryParser.parse()
方法吧,這是我的代碼片段:Lucene:通過標記字符串構建查詢並通過
booleanQuery.add(
new QueryParser(
org.apache.lucene.util.Version.LUCENE_40,
"tags",
new WhitespaceAnalyzer(org.apache.lucene.util.Version.LUCENE_40)
).parse("tag1 tag2 tag3"),
BooleanClause.Occur.SHOULD);
我不過想如果這是一個方面傳遞給booleanQuery正確的方法。
QueryParser.parse
方法返回一個SrndQuery
對象,我直接傳遞給booleanQuery.add()
方法。
不確定這是否正確。我是否應該從SrndQuery
或其他類似的東西中提取單個術語,並且多次調用booleanQuery.add()
?
更新:打印查詢
*.*:*.* title:Flickrmeetup_01 description:Michael description:R. description:Ross tags:rochester tags:ny tags:usa tags:flickrmeetup tags:king76 tags:eos350d tags:canon50mmf14 tags:mikros tags:canon tags:ef tags:50mm tags:f14 tags:usm tags:canonef50mmf14 tags:canonef50mmf14usm
以及我建議打印查詢,這是結果..顯然它的工作原理:相同的字段重複每個術語。但是,請你能看看打印的查詢(添加到問題中)並讓我知道我是否正確? – aneuryzm 2011-03-23 10:58:17
@帕特里克 - 看起來不錯。我不喜歡全球部分(。:*。*) - 這可能會傷害到性能。我建議你檢查一下結果集,看看你是否能得到你想要的結果,並檢查性能。 – 2011-03-23 11:07:13
好吧,我想這個。:*。*是因爲MatchAllDocsQuery – aneuryzm 2011-03-23 11:36:12