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

时间:2011-03-23 06:54:51

标签: lucene

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

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

1 个答案:

答案 0 :(得分:1)

我相信你应该提取标记,将每个标记包装在一个Term中,然后为它创建一个TermQuery,然后将TermQuery添加到BooleanQuery中。无论如何,SrndQuery是抽象的,所以我猜你当前的代码会创建一个子类的实例,这可能不是你的意思。您可能希望为此创建自己的自定义QueryParser。