【发布时间】:2010-09-20 18:08:41
【问题描述】:
我正在使用 Lucene.net,但我将这个问题标记为 .NET 和 Java 版本,因为 API 是相同的,我希望在这两个平台上都有解决方案。
我确信其他人已经解决了这个问题,但我找不到任何好的讨论或示例。
默认情况下,Lucene 对查询语法非常挑剔。例如,我刚刚收到以下错误:
[ParseException: Cannot parse 'hi there!': Encountered "<EOF>" at line 1, column 9.
Was expecting one of:
"(" ...
"*" ...
<QUOTED> ...
<TERM> ...
<PREFIXTERM> ...
<WILDTERM> ...
"[" ...
"{" ...
<NUMBER> ...
]
Lucene.Net.QueryParsers.QueryParser.Parse(String query) +239
在处理来自用户的查询时,防止 ParseExceptions 的最佳方法是什么?在我看来,最可用的搜索界面总是执行查询,即使它可能是错误的查询。
似乎有一些可能的互补策略:
- 在将查询发送到 QueryProcessor 之前“清理”查询
- 优雅地处理异常
- 向用户显示智能错误消息
- 也许执行一个更简单的查询,去掉错误的位
对于如何执行这些策略,我真的没有什么好主意。有没有其他人解决过这个问题?有没有我不知道的“简单”或“优雅”解析器?
【问题讨论】:
标签: lucene lucene.net