2016-11-02 67 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