Lucene 3.5.0 QueryParser在以编程方式生成的查询时没有找到任何结果

时间:2012-04-05 16:59:54

标签: java lucene

最近这让我感到困惑,我似乎无法在任何地方找到合适的解释。

如果我运行使用查询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 上运行此命令会给我一个结果。有没有人知道发生了什么?

1 个答案:

答案 0 :(得分:5)

您可能使用了错误的Analyzer for QueryParser对象。请注意:

  1. 当您构建自己的Term对象时,术语的文本为大写。
  2. 您将StandardAnalyzer提供给QueryParser,因此术语的文本将转换为小写(通过StandardAnalyzer)。
  3. Luke的默认分析器是KeywordAnalyzer,它保留了你指定术语的大小写(即大写)。
  4. 我猜你索引文本时你的术语是大写的(或者变成大写)。这解释了为什么方法1和3工作,但2没有,因为案例不匹配。一般来说,use the same Analyzer when indexing and when searching是个好主意,或者至少要注意这个案例。