2016-11-02 102 views
0

我有一個solr文本字段如下。按類型= text_en按字母順序排序結果

<field name="news_headline_ln_en" type="text_en" indexed="true" stored="true"/> 

而當查詢如下排序結果時,它不顯示正確的字母順序的結果。

http://localhost:8983/solr/news/select?fl=news_headline_ln_en&indent=on&q=*:*&rows=100&sort=news_headline_ln_en%20desc&start=0&wt=json 

結果答覆:

{ 
    "responseHeader":{ 
    "status":0, 
    "QTime":45, 
    "params":{ 
     "q":"*:*", 
     "indent":"on", 
     "fl":"news_headline_ln_en", 
     "start":"11610", 
     "sort":"news_headline_ln_en asc", 
     "rows":"12021", 
     "wt":"json", 
     "_":"1478085256196"}}, 
    "response":{"numFound":12621,"start":11610,"docs":[ 
     { 
     "news_headline_ln_en":"Eleven stocks up despite UAE markets decline"}, 
     { 
     "news_headline_ln_en":"\nOil Prices Decline on Fed Rate Rise Jitters"}, 
     { 
     "news_headline_ln_en":"Euro unemployment rate declines in February"}, 
     { 
     "news_headline_ln_en":"Investors Holding’s Q4 profits decrease"}, 
     { 
     "news_headline_ln_en":"DED honors ‘On Time’ in Oud Metha for excellence"}, 
     { 
     "news_headline_ln_en":"\nTreasures From The Deep -- WSJ"}, 
     { 
     "news_headline_ln_en":"Tunisia shares deepen early losses"}, 
     { 
     "news_headline_ln_en":"EGX deepens losses in week"}, 
     { 

正如你可以看到它是不是按字母順序排序。任何人都知道可能的原因?感謝任何幫助。

回答

1

你不能。 text_en不適合排序,因爲它會標記輸入並將文本分成不同的標記。這些令牌不可用於排序。

溶液is to add a copyField instruction該複製從text_en字段的內容轉移到字段適於排序,諸如string字段或具有KeywordTokenizer的文本字段(這將允許您小寫字符串,但將其保留爲單個標記 - 如果您希望排序不區分大小寫)。如果您使用的是字符串字段,如果您希望排序不區分大小寫,則必須在自行編制索引之前將字段小寫。

<copyField source="news_headline_ln_en" dest="news_headline_ln_en_sort" /> 

..然後使用sort=text_sort進行排序。如果您只需複製原始字符串的開頭,則可以使用maxChars設置(例如,如果按文章的開頭進行排序,則可能只需要文章的前20-40個字符即可排序有用)。

另請參閱defining fieldsSchema API

+0

我試着用你的方法。但後來它說'無法排序在多值字段上:news_headline_ln_en_sort'這裏是我使用的代碼: \t <過濾器類= 「solr.LowerCaseFilterFactory」/> ' – Channa

+0

設置爲不被多值字段:'多值= 「假」'。 – MatsLindh