Я использую 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
- Обработка исключений
- Показать пользователю сообщение об ошибке
- Возможно, выполните более простой запрос, оставив ошибочный бит
У меня действительно нет отличных идей о том, как сделать любую из этих стратегий. Кто-нибудь еще затронул эту проблему? Есть ли "простые" или "изящные" парсеры, о которых я не знаю?