弹性搜索:尽管fielddate设置为true,但文本排序不起作用

时间:2017-02-09 17:58:57

标签: sorting elasticsearch

我正在尝试对我将fielddate设置为true的文本类型字段进行排序,但它总是给我相同的顺序

这是我的映射:

 "movieTitle": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            },
            "analyzer": "french",
            "fielddata": true
          }

这是我的要求

POST /0802v6/movie/_search
{
  "from": 0,
  "size": 10,
  "min_score": 1,
  "sort": [
    {
      "movieTitle": {
        "order": "asc" //or desc
      }
    }
  ],

   "_source": "movieTitle",

  "query": {...}
}

不幸的是,我总是使用asc或desc设置相同的结果。 我可以看到sort属性不包含正确的单词

"hits": [ {
    "_index": "0802v6",
    "_type": "proj",
    "_id": "AVojCSjg8N13TOVDp6r2",
    "_score": null,
    "_source": {
      "movieTitle": "12 Years a Slave"
    },
    "sort": [
      "12"
    ]
  },
  {
    "_index": "0802v6",
    "_type": "proj",
    "_id": "AVojCSg58N13TOVDp6pV",
    "_score": null,
    "_source": {
      "movieTitle": "black wing has my angel"
    },
    "sort": [
      "angel"
    ]
  },
  {
    "_index": "0802v6",
    "_type": "proj",
    "_id": "AVojCSjg8N13TOVDp6qT",
    "_score": null,
    "_source": {
      "movieTitle": "TO DO LIST (THE)"
    },
    "sort": [
      "do"
    ]
  },
  {
    "_index": "0802v6",
    "_type": "proj",
    "_id": "AVojCSo28N13TOVDp68w",
    "_score": null,
    "_source": {
      "movieTitle": "Third Person"
    },
    "sort": [
      "person"
    ]
  }

  ]

你知道会发生什么以及如何解决它吗?

1 个答案:

答案 0 :(得分:1)

这是因为标题被标记为单词。因此,像{Aardvark这个词'这样的电影片名"Zelda's Aardvark"仍然会提前排序。您可能希望保留用于搜索的文本字段,因此您应该查看多字段,并对raw(或任何您的名字)进行排序,如下所示:

  "sort": {
    "movieTitle.raw": "asc" 
  },

您仍然需要movieTitle字段进行全文搜索。

有关多字段文档,请参阅here