私は Lucene.net を使用していますが、API は同じであり、両方のプラットフォームに解決策があることを望んでいるため、.NET と Java の両方のバージョンについてこの質問にタグを付けています。
他の人がこの問題に取り組んでいると確信していますが、良い議論や例を見つけることができませんでした.
デフォルトでは、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 に送信する前に「クリーン」にする
- 例外を適切に処理する
- ユーザーにインテリジェントなエラー メッセージを表示する
- おそらく、より単純なクエリを実行して、エラーのあるビットを除外します
これらの戦略をどのように実行するかについて、私は本当に素晴らしいアイデアを持っていません。他の誰かがこの問題に対処しましたか? 私が知らない「シンプル」または「優雅な」パーサーはありますか?