2016-07-15 26 views
0

我有一個問題 - 如果在響應中同時存在大小寫值,則需要對SOLR進行排序以產生正確的字母順序。 現在,使用Solr按正確的字母順序排序

<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 

像有大寫和小寫字母之間沒有優先級。

但它需要得到這樣的:

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。這樣你總是得到一個令牌,而且是小寫字母。如果您仍想使用同義詞等搜索原始字段,請使用原始字段中的copyField。不必存儲副本,僅使用索引表示進行排序。

另外,docValues適合分類。