2012-02-21 16 views
2

solrを使って検索しています。単語を検索するときに大文字が含まれています。大文字の単語をsolrを使って段落から検索する

description、その結果は表示されません。しかし、小文字の結果が得られます。

例:クエリがq = description:* stack *の場合、結果が得られます。クエリがある場合でも、

qは=説明:

<fieldType name="string" class="solr.TextField"> 
<analyzer type="index"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.ASCIIFoldingFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory" /> 
    <filter class="solr.ReversedWildcardFilterFactory" /> 
</analyzer> 
<analyzer type="query"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.ASCIIFoldingFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory" /> 
    <filter class="solr.ReversedWildcardFilterFactory" /> 
    </analyzer> 
</fieldType> 

私も大文字で検索したい:*スタック*は、それは文句を言わない任意の結果を与えるevenif説明は

私のスキーマが含まれ、その単語が含まれています..

誰かが私を助けることができますか?

+0

あなたの質問はもう少し明確になりますか? –

答えて

1

Solr wikiをご覧ください。それは言う:

クエリアナライザではなく、このフィルタをインデックスアナライザに追加します。

あなたがウィキ命令を反映するために、スキーマを変更した後debugQuery=onに照会してみてください。

<str name="querystring">text:*Stack*</str> 
<str name="parsedquery">text:#1;*kcatS*</str> 

あなたが見ることができるように、ReversedWildcardFilterFactoryは、それはあなたのクエリアナライザチェーンにない場合でも、あなたのクエリを変更しますこのようなFIELDTYPEで:さらに

<fieldType name="text" class="solr.TextField"> 
    <analyzer type="index"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.ASCIIFoldingFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/>   
     <filter class="solr.ReversedWildcardFilterFactory" />  
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/>  
     <filter class="solr.ASCIIFoldingFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/>    
    </analyzer> 
</fieldType> 

LowerCaseFilterFactoryは、クエリのために解雇されていません(Sは目に小文字されていませんeパースされたクエリ)。 ASCIIFoldingFilterFactoryについても同様です。 は、ルックhereがより多くのを知っている必要があります:

Solrにはワイルドカードがされたクエリを分析しません。はい、この は、フィルタのLowerCaseFilterFactoryがインデックス中に がStackスタックになることを意味しますが、クエリの作成時には、フィルタが正しく定義されているという事実にもかかわらず、 にもかかわらず、これは起こりません。そのため、 の検索結果はありません。

私の頭に浮かぶ最も簡単な解決策は、クライアント側でクエリをソルバーに送信する前に小文字にすることです。また、ASCIIFoldingFilterFactoryも発砲していないと考えるべきです。それは本当に必要ですか?

+0

ありがとうございました...私にはそれについての明確な考えがあります。 – Micku

+0

これはうまくいきましたか? SOLRの欠陥追跡(https://issues.apache.org/jira/browse/SOLR-2438)によると、この問題はv3.6および4.0で修正されています。 –

+0

@MikePurcell私の例は、 'ReversedWildcardFilterFactory'がどのように動作するかを示しています。ワイルドカードクエリに対してフィルタは起動されません。私はちょうどそれがうまくいかない理由を説明し、潜在的な解決策を提案しました。私はSOLR-2438がどれほどReversedWildcardFilterFactoryに関係しているかわかりません。 – javanna

関連する問題