【发布时间】:2014-02-28 16:31:24
【问题描述】:
我目前不确定 Lucene 中 QueryParser 与 TermQuery 的行为;我正在使用 Lucene 3.6。
在我的示例中,我在同一索引上尝试以下示例,其中相关字段设置为 Field.Store.NO 和 Field.Index.NOT_ANALYZED_NO_NORMS。
Query q1 = new TermQuery(new Term("names", "test three"));
QueryParser q2p = new QueryParser(GenericIndexer.LUCENE_VERSION, "names", someAnalyzer);
Query q2 = q2p.parse("names:test three");
Query q3 = q2p.parse("names:\"test three\"");
在q2 和q3 这两种情况下,我都无法重现与q1 相同的语法;通过打印查询,我可以看到:
- q1 =
names:test three - q2 =
names:test names:three - q3 =
names:"test three"
由于这种差异,查询 q2 和 q3 不返回任何结果,而查询 q1 返回预期结果。
问题:有没有办法让查询解析器重现与 TermQuery 相同的查询,或者我在这里遗漏了一些基本的 Lucene 概念?
注意:对于 QueryParser,分析器与索引期间使用的分析器相同,尽管我不确定这些信息的相关性。
【问题讨论】: