lucene.net(2.3.2)と互換性のあるWordDelimiterFilterの移植バージョンを使用していますが、ハイフンを含む単語でワイルドカード検索を実行すると機能しません。
例として、「CL-276-0001」という単語があります。「cl」 / 「cl-276」 / 「cl-276-0001」を検索すると、レコードに問題はありません(最初に解決しようとしていたものです)。 )が、「cl-276 *」、または「cl-276-0 *」を検索すると、機能しなくなりました。「cl*」は影響を受けません。これにより、呼び出されたものにワイルドカードを追加せずに、クエリパーサーで何かを実行している可能性があると思います。
これを解決/理解するための助けをいただければ幸いです。
編集:クエリパーサーによって生成されたクエリを見ました。これは正確に入力されたものです。これは、ユーザーがプレフィックスとして入力したものを正確に検索するため、検索が機能しないことを意味していると思います。今、私はこの振る舞いを変えるべきではないと考えています。
2番目の編集:誰かがアナライザーがどのように見えるか尋ねました:
public override TokenStream TokenStream(string fieldName, TextReader reader)
{
TokenStream result = new WhitespaceTokenizer(reader);
result = new WordDelimiterFilter(result,1, 1, 1 , 1, 1 );
result = new StandardFilter(result);
result = new LowerCaseFilter(result);
result = new StopFilter(result, LoadStopWords());
return result;
}