2016-10-01 16 views
0

達成したいのは、testを検索して、大文字と小文字を区別しないで検索するTest, TeSt, TesT,TESTです。 どうすればよいですか?SOLR大文字と小文字を区別しないフィールド検索の問題

私はここでtest_field

<fieldType name="textgen" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="select"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

に割り当てられている私のschema.xmlでこのtextgenタイプを持っているが、私は私のクエリを受け取るために必要な結果です。

{ 
    "responseHeader":{ 
    "status":0, 
    "QTime":2, 
    "params":{ 
     "q":"test_field:*", 
     "indent":"true", 
     "wt":"json"}}, 
    "response":{"numFound":5,"start":0,"docs":[ 
     { 
     "id":"change.me", 
     "test_field":["test"], 
     "_version_":1546932094148542464}, 
     { 
     "id":"change.me1", 
     "test_field":["tesT"], 
     "_version_":0203020288}, 
     { 
     "id":"change.me2", 
     "test_field":["TesT"], 
     "_version_":3122255872}, 
     { 
     "id":"change.me3", 
     "test_field":["TEsT"], 
     "_version_":7768496128}, 
     { 
     "id":"change.me4", 
     "test_field":["TEST"], 
     "_version_":1546932111283322880}] 
    }} 

私はそれはそれはフィルタLowerCaseFilterFactory

http://localhost:8983/solr/test-data/select?q=test_field:*test*&wt=json&indent=true

と空の結果を持っているにもかかわらず、大文字と小文字が区別されますので、それがどんな結果を与えるものではありません。このクエリを使用します。 (私が間違っているのは何ですか?)

{ 
    "responseHeader":{ 
    "status":0, 
    "QTime":2, 
    "params":{ 
     "q":"test_field:*test*", 
     "indent":"true", 
     "wt":"json"}}, 
    "response":{"numFound":1,"start":0,"docs":[ 
     { 
     "id":"change.me", 
     "test_field":["test"], 
     "_version_":1546932094148542464}] 
    }} 
+0

フィルタを追加した後にドキュメントのインデックスを作成する必要があります。ですから、文書を再度索引付けした後に照会を確認してください。 –

+0

私は新しいスキーマを作成しました。それはうまくいきました。古いソルのスキーマで何かがうんざりしていたと思います。 –

答えて

0

検索用語の両端に実際に星印(ワイルドカード)を入れていますか?あなたはそれをする必要はありません。 Solr設定の全ポイントは、ワイルドカードのない単語を検索するだけの方法でテキストをトークン化することです。

テキスト内の作品を検索するだけであれば、大文字と小文字の混在も可能です。そうでない場合は、フィールドが実際に正しいタイプにマッピングされていることと、再インデックス付けされていることを確認してください。まだ混乱している場合、Solr Admin UIには、フィールド(またはフィールドタイプ)を選択し、何かがどのようにトークン化され、どのようにマッチするかを見ることができる分析画面があります。あなたはそこで実験することができます。

+0

私は新しいスキーマを作成しました。それはうまくいきました。古いソルのスキーマで何かがうんざりしていたと思います。 –

関連する問題