2

我在个人项目中使用 Lucene.Net,需要处理案例,但找不到一个好方法让 lucene 使用相同类型的查询来处理这两个案例。

基本查询使用 MultiFieldQueryParser 和 StandardAnalyzer 和 NumericRangedFilter 来按日期过滤(日期保存为长值)。

问题是我希望过滤器处理空搜索字符串,而不必使用两个不同的查询解析器,一个用于空搜索字符串,一个用于用户输入搜索字符串。当前,当使用空字符串时,MultiFieldQueryParser 会引发 ParseException。

有关处理此问题的最佳方法的任何建议?或者这是 Lucene 或 Lucene.Net 中的一个缺陷(有意或无意)。

结果

如果查询字符串为空,则我最终使用 MatchAllDocsQuery,否则使用普通查询。

此外,我不得不删除 NumericFields 和 NumericRangeFilter 的使用,因为当我使用它们时查询没有返回任何结果。我最终使用字符串和普通 RangeFilter 以旧方式进行日期范围过滤。

4

1 回答 1

4

处理它的最佳方法是生成 aMatchAllDocsQuery并在输入为空字符串时绕过解析器。

http://lucene.apache.org/core/old_versioned_docs/versions/2_9_4/api/all/org/apache/lucene/search/MatchAllDocsQuery.html

于 2012-09-09T20:43:36.117 回答