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