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