大家好,我有一个问题:)
我创建了这样一个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
发布于 2016-03-08 13:11:51
TextField通过分析器运行数据,很可能产生术语"anna" (小写)。TermQuery不通过分析器运行任何内容,因此它搜索"Anna" (大写),这与此不匹配。使用小写术语创建TermQuery,您应该会看到结果:new TermQuery(new Term("Name", "anna"))。BooleanQuery与此无关,事实上,这个特定的查询会将自己重写到底层的TermQuery,因为这是唯一的子查询。解析器接受字符串"Name:Anna" (由TermQuery生成),通过分析器运行它,并为您提供一个"Name:anna" TermQuery,这就是如果您通过解析器运行查询的原因--它涉及到必要的分析步骤。
https://stackoverflow.com/questions/35865323
复制相似问题