Lucene:通过标记字符串和传递来构建查询

Lucene:通过标记字符串和传递来构建查询,lucene,Lucene,我需要从字符串中提取单个术语,以使用BooleanQuery构建查询。 我正在为它使用QueryParser.parse()方法,这是我的代码片段: booleanQuery.add( 新探索者( org.apache.lucene.util.Version.lucene_40, “标签”, 新的WhitespaceAnalyzer(org.apache.lucene.util.Version.lucene40) ).parse(“tag1 tag2 tag3”), boolean子句。发生。应

我需要从字符串中提取单个术语,以使用
BooleanQuery
构建查询。 我正在为它使用
QueryParser.parse()
方法,这是我的代码片段:

booleanQuery.add(
新探索者(
org.apache.lucene.util.Version.lucene_40,
“标签”,
新的WhitespaceAnalyzer(org.apache.lucene.util.Version.lucene40)
).parse(“tag1 tag2 tag3”),
boolean子句。发生。应该);
然而,我想知道这是否是将单个术语传递给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

我认为您应该提取标记,将每个标记封装在一个术语中,然后为其创建一个TermQuery,然后将TermQuery添加到BooleanQuery中。无论如何,SrndQuery是抽象的,所以我猜您当前的代码将创建一个子类的实例,这可能不是您想要做的。您可能需要为此创建自己的自定义QueryParser。

有人建议我打印查询,这就是结果。。显然它是有效的:每个术语都重复相同的字段。但是请你看一下打印出来的问题(添加到问题中),并告诉我我是否正确?@Patrick-看起来不错。我不喜欢全局部分(.:**)-它可能会影响性能。我建议您检查结果集,看看是否达到预期效果,并检查性能。好的,我想这是因为MatchAllDocsQuery