最近这让我感到困惑,我似乎无法在任何地方找到合适的解释。
如果我运行使用查询API构建的查询,它可以很好地工作。
TermQuery sourceQuery = new TermQuery(new Term("source", "CNN"));
正在运行results = searcher.search(sourceQuery, 30)
并检查results.totalHits
会显示值为159。
但是,在同一个程序中,我设置了QueryParser
(我的默认字段名为text
):
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35);
QueryParser parser = new QueryParser(Version.LUCENE_35,
"text", analyzer);
并输入命令行查询
source:CNN
我得到没有结果。在Luke 上运行此命令会给我一个结果。有没有人知道发生了什么?
答案 0 :(得分:5)
您可能使用了错误的Analyzer for QueryParser对象。请注意:
我猜你索引文本时你的术语是大写的(或者变成大写)。这解释了为什么方法1和3工作,但2没有,因为案例不匹配。一般来说,use the same Analyzer when indexing and when searching是个好主意,或者至少要注意这个案例。