我在个人项目中使用Lucene.Net并且需要处理案例但是找不到lucene使用相同类型的查询处理这两种情况的好方法。
基本查询使用MultiFieldQueryParser和StandardAnalyzer以及NumericRangedFilter按日期过滤(日期保存为长值)。
问题在于我希望过滤器处理空搜索字符串,而不必使用两个不同的查询解析器,一个用于空搜索字符串,另一个用户输入搜索字符串。目前,当使用空字符串时,MultiFieldQueryParser会抛出ParseException。
有关处理此问题的最佳方法的任何建议吗?或者这是Lucene或Lucene.Net中的一个(有意或无意的)缺陷。
RESULT
如果查询字符串为空,我最终使用MatchAllDocsQuery,否则会使用普通查询。
此外,我不得不删除NumericFields和NumericRangeFilter的使用,因为当我使用它们时,查询没有返回任何结果。我最后用字符串和普通的RangeFilter来做旧日期范围过滤。
答案 0 :(得分:4)
处理它的最佳方法是生成MatchAllDocsQuery
并在输入为空字符串时绕过解析器。