使用type = text_en按字母顺序对结果进行排序

时间:2016-11-02 11:29:43

标签: sorting solr

我有一个solr文本字段如下。

  <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 个答案:

答案 0 :(得分:1)

你做不到。 text_en不适合排序,因为它会对输入进行标记并将文本分解为单独的标记。这些令牌不能用于分类。

text_en字段中的内容复制到适合排序的 字段的解决方案is to add a copyField instruction,例如string字段或带有KeywordTokenizer的文本字段(允许您将字符串小写,但将其保留为单个标记 - 如果您希望排序不区分大小写)。如果您正在使用字符串字段,那么如果您希望排序不区分大小写,则必须先自动编制字段小写字段。

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

..然后使用sort=text_sort进行排序。如果您只需要复制原始字符串的开头,则可以使用maxChars设置(例如,如果您按文章的开头排序,则可能只需要文章的前20-40个字符为了有用的种类)。

另请参阅defining fieldsSchema API