lucene BooleanQuery.Builder 构建不工作
lucene BooleanQuery.Builder Build doesn't Work
大家好,我有一个问题:)
我像这样创建一个 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 版本,名称是一个 TextField
A TextField
运行 通过分析器分析您的数据,可能会生成术语 "anna"
(小写)。 TermQuery
不通过分析器 运行 任何东西,因此它搜索 "Anna"
(大写)并且这不匹配。使用小写的术语创建 TermQuery
,您应该会看到结果:new TermQuery(new Term("Name", "anna"))
。
BooleanQuery
与此无关,事实上,此特定查询会将自身重写为基础 TermQuery
,因为这是唯一的子查询。
解析器获取字符串 "Name:Anna"
(由 TermQuery
生成),运行 将其通过分析器并为您提供 "Name:anna"
TermQuery
,这就是它工作的原因如果您 运行 通过解析器查询 – 它涉及必要的分析步骤。
大家好,我有一个问题:)
我像这样创建一个 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 版本,名称是一个 TextField
A TextField
运行 通过分析器分析您的数据,可能会生成术语 "anna"
(小写)。 TermQuery
不通过分析器 运行 任何东西,因此它搜索 "Anna"
(大写)并且这不匹配。使用小写的术语创建 TermQuery
,您应该会看到结果:new TermQuery(new Term("Name", "anna"))
。
BooleanQuery
与此无关,事实上,此特定查询会将自身重写为基础 TermQuery
,因为这是唯一的子查询。
解析器获取字符串 "Name:Anna"
(由 TermQuery
生成),运行 将其通过分析器并为您提供 "Name:anna"
TermQuery
,这就是它工作的原因如果您 运行 通过解析器查询 – 它涉及必要的分析步骤。