lucene BooleanQuery.Builder Build没有工作

时间:2016-03-08 10:48:20

标签: java lucene booleanquery

Hello Guys我有一个问题:)

我创建了一个像这样的BooleanQuery:

BooleanQuery.Builder qry = new BooleanQuery.Builder();
qry.add(new TermQuery(new Term("Name", "Anna")), BooleanClause.Occur.SHOULD);

如果我现在进行这样的搜索:

TopDocs docs = searcher.search(qry.build(), hitsPerPage);

它得到零结果?但是如果我使用这段代码:

TopDocs docs = searcher.search(parser.parse(qry.build().toString()),    hitsPerPage);

然后我得到了正确的结果?你能解释一下为什么我要再次解析它吗?

我使用的是版本5.5.0,而Name是一个TextField

1 个答案:

答案 0 :(得分:4)

TextField通过分析器运行您的数据,可能会生成术语"anna"(小写)。 TermQuery不会通过分析器运行任何内容,因此它会搜索"Anna"(大写),但这不匹配。使用较低的术语创建TermQuery,您应该看到结果:new TermQuery(new Term("Name", "anna"))BooleanQuery与此无关,实际上,此特定查询会将自身重写为基础TermQuery,因为这是唯一的子查询。 解析器接受字符串"Name:Anna"(由TermQuery生成),通过分析器运行它,并为您提供"Name:anna" TermQuery,这就是为什么它运行查询的原因通过解析器 - 它涉及必要的分析步骤。