带有过滤器的Lucene空查询字符串

时间:2012-09-09 09:32:35

标签: c# java lucene lucene.net

我在个人项目中使用Lucene.Net并且需要处理案例但是找不到lucene使用相同类型的查询处理这两种情况的好方法。

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

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

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

RESULT

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

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

1 个答案:

答案 0 :(得分:4)

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

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