2016-07-15 17 views
0

私は問題があります。大文字と小文字の両方の値が応答した場合、正しいアルファベット順にSOLR結果をソートする必要があります。今 、大文字と小文字の間には優先順位がないように、私は簡単にこのSolrソート順正しいアルファベット順に並べ替え

aaa 
AAA 
BBB 
bbb 
BBB 
DDD 
ddd 

のようになめらかに取得することができます

<field name="somefield" type="text_general" indexed="true" stored="true"/> 

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
    <!-- in this example, we will only use synonyms at query time 
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
    --> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

を使用。

しかし、その次のように取得するために必要:正しく並べ替えなどを行うためにどのように

aaa 
AAA 
bbb 
BBB 
BBB 
ddd 
DDD 

+0

お使いのバージョンは?私はあなたの問題をSolr 5.4.1で再現しようとしましたが、Solrにそのテキストフィールドをソートするように指示すると、ドキュメントは正しい順序でソートされます。 – cuh

+0

@cuhありがとう。私は5.4.0を使用しています。必要に応じて正確な結果を得ることができますか?フィールドとタイプの設定を提供できますか? – alexloiko

+0

@cuhは、私は現在、フィールドtitle_t(text_general)のための新しいコアに試してみて、このような結果を受け取っ/ DDDとDDDセクションで見てくださいので '{ "title_t": "AAA" }、 { "title_t" : "AAA" }、 { "title_t": "AAA" }、 { "title_t": "BBB" }、 { "title_t": "DDD" }、 { " title_t ":" DDD " }、 { " title_t ":" ddd " } ' – alexloiko

答えて

1

99%のケースでは、トークン化されたフィールドをソートしたくありません。あなたが5つのトークンで終わると、それらのうちのどれをソートするのでしょうか?

ただし、小文字にしたい場合は、トークン化フィールドにすることができます。ちょうどKeywordTokenizerとLowercaseFilterです。そうすれば、常に1つのトークンが得られ、小文字になります。シノニムなどで元のフィールドを検索する場合は、元のフィールドのcopyFieldを使用します。コピーを保存する必要はなく、ソートではインデックス付きの表現のみを使用します。

また、docValuesはソートに適しています。

関連する問題