6

標準アナライザーが機能しません。私が理解できることから、これは検索に変更されcnet

動作しますWhitespaceAnalyzerが、大文字と小文字が区別されます。

一般的なルールは、検索は Google のように機能する必要があるため、構成を考慮して、しばらくそこにいるか、これに対する回避策があることを願ってい.netますc#

以下の提案に従って、カスタムを試しましたWhitespaceAnalyzerが、キーワードがコンマで区切られていてスペースがない場合、正しく処理されません。

java,.net,c#,oracle 

検索中に返されませんが、これは正しくありません。

トークンを分割するために使用されるものに出くわしましPatternAnalyzerたが、このシナリオでそれを使用する方法がわかりません。

私は使用Lucene.Net 3.0.3しています.NET 4.0

4

3 に答える 3

7

Lucene.Net – Custom Synonym AnalyzerSynonymAnalyzerのように、独自のカスタム アナライザー クラスを記述します。のオーバーライドは、andを使用してストリームをパイプライン化することでこれを解決できます。TokenStreamWhitespaceTokenizerLowerCaseFilter

インデクサーとサーチャーは同じアナライザーを使用する必要があることに注意してください。

更新: 複数のコンマ区切りキーワードの処理

インデックス作成ではなく、スペースなしのカンマ区切りのキーワードのみを処理する必要がある場合は次のように検索式exprを変換できます。

expr = expr.Replace(',', ' ');

次に、 に渡しexprますQueryParser。「;」などの他の区切り文字をサポートしたい場合 あなたはこのようにすることができます:

var terms = expr.Split(new char[] { ',', ';'} );
expr = String.Join(" ", terms);

ただし、"sybase,c#,.net,oracle" (式には引用符 " chars が含まれる) などの変換すべきでない句式 (ユーザーは完全一致を探している) を確認する必要もあります。

expr = expr.Trim();
if (!(expr.StartsWith("\"") && expr.EndsWith("\"")))
{
    expr = expr.Replace(',', ' ');
}

式には、次のようにフレーズといくつかのキーワードの両方が含まれる場合があります。

"sybase,c#,.net,oracle" server,c#,.net,sybase

次に、検索式を解析して次のように変換する必要があります。

"sybase,c#,.net,oracle" server c# .net sybase

インデックス作成のためにスペースなしのカンマ区切りのキーワードも処理する必要がある場合は、スペースなしのカンマ区切りのキーワードのテキストを解析し、それらを個別のフィールドに格納する必要があります。Keywords(カスタム アナライザーに関連付ける必要があります)。次に、検索ハンドラーは次のように検索式を変換する必要があります。

server,c#,.net,sybase

これに:

Keywords:server Keywords:c# Keywords:.net, Keywords:sybase

またはもっと簡単に:

Keywords:(server, c#, .net, sybase)
于 2013-02-22T10:56:23.357 に答える
4

を使用し、それをLowerCaseFilterWhitespacerAnalyzerとチェーンします。

検索時とインデックス時に同じチェーンを使用します。すべてを小文字に変換すると、実際には大文字と小文字が区別されなくなります。

問題の説明によると、それは機能し、実装が簡単なはずです。

于 2013-02-23T03:12:17.630 に答える
-2

答えを探しているかもしれない他の人のために

最終的な答えは、カスタム TokenFilter と、そのトークン フィルターを Whitespacetokenizer、lowercasefilter などと一緒に使用するカスタム アナライザーを作成することであることが判明しました。全体で約 30 行のコードです。ブログ投稿を作成し、リンクを投稿します。 、まずブログを作成する必要があります。

于 2013-03-07T16:36:06.877 に答える