9

FirstNameを次のように持ついくつかのレコードに対してSolr検索を使用しようとしています。

abcd
Abcd
abcD
ABcd
abCd
abCD

現在、ワイルドカード文字をサポートして検索を実行しようとしています。大文字と小文字を区別するという点で、検索がどのように正確に機能するかを理解する必要があります。

たとえば、FirstNameパラメータをab * Vs Ab *として渡すと、どのレコードが返されますか?

検索で大文字と小文字を区別するか、大文字と小文字を区別しないようにする/強制する方法はありますか?

4

4 に答える 4

8

schema.xml でフィールドをどのように定義するかによって異なります。インデックス作成およびクエリ中にLowerCaseFilterFactoryを使用すると、すべてのクエリで大文字と小文字が区別されなくなります。それ以外の場合は、大文字と小文字が区別されます。

<filter class="solr.LowerCaseTokenizerFactory"/>
于 2012-07-17T09:06:21.707 に答える
7

スキーマ内で構成します。例えば:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="query">
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

は、クエリのフィールドが小文字と見なされることを意味します。これにより、大文字と小文字を区別しない検索であるという印象が与えられます。

于 2012-07-17T09:08:09.597 に答える
5

solr スキーマのデフォルトで定義されたフィールドは、まったく異なる動作をします。

データ型'string'は、完全ではない正確な文字列として単語を格納します。

'text_general'通常、トークン化と二次処理 (大文字と小文字を区別しない、文字列全体の一致など) を実行します。文の一部を一致させたい場合、すべてのシナリオで非常に便利です。

次のサンプル「文を検索」が両方のフィールドにインデックス付けされている場合、文字列フィールドからヒットを取得するには文を正確に検索する必要がありますが、text_general の場合は異なる結果が返されます。

ここで、販売者名は検索文字列で完全に一致しますが、製品名は上記の文全体で検索されます。

例:

<field name="seller_name" type="string" indexed="true" stored="true"/>
<field name="product_name" type="text_general" indexed="true" stored="true"/>
于 2016-05-27T12:25:02.983 に答える
2

デフォルトでは、値は格納された値と正確に一致します。フィールドで大文字と小文字を区別しないようにする場合、通常は、小文字のフィルターを使用するフィールド タイプを使用して、インデックス付けされたすべてのコンテンツを同じ大文字と小文字にし、実質的に検索で大文字と小文字を区別しないようにします (クエリ値も小文字になるため)。 )。

サンプル コンテンツは、'text' および 'text_en' フィールド タイプに対してこれを行います。

<filter class="solr.LowerCaseFilterFactory"/>

ただし、ワイルド カード クエリの小文字の自動処理が問題を引き起こす可能性のある特定の領域がいくつかあり、これらの状況を処理するために Solr 3.6 および 4.0 で MultitermQueryAnalysis が導入されました。3.6 と 4.0 は、フィールドが既に小文字になっている場合、ワイルド カード検索を自動的に正しい方法で行う必要があります。

3.6 より前の正しい動作が得られない場合は、ワイルドカードを使用するときに、クエリで名前を小文字にすることをお勧めします (インデックス作成時に LowerCaseFilterFactory を適用した場合)。

于 2012-07-17T09:10:27.730 に答える