Elasticsearch对字符串排序不返回预期结果

时间:2014-01-27 19:24:00

标签: sorting elasticsearch

在对包含多个单词的字符串字段进行排序时,Elasticsearch会拆分字符串值并使用min或max作为排序值。 I.E。:在具有“老虎之眼”值的字段上按升序排序时,排序值为:“Eye”,当按降序排序时,值为:“Tiger”。

让我说我的“老虎之眼”和“死亡之轮”作为我的索引中的条目,当我在这个领域进行提升时,我希望,“老虎之眼”是第一个,因为“E”出现在“W”之前,但是当我在这个领域排序时,我看到的是“死亡之轮”首先出现,因为“D”是该术语的最小值而“E”是最小值“老虎之眼”。

有没有人知道如何关闭此行为并只允许对此字符串字段进行常规排序?

2 个答案:

答案 0 :(得分:10)

正如mconlin所提到的,如果要对未分析的doc字段进行排序,则需要指定“index”:“not_analyzed”以按照您的描述进行排序。但是如果你希望能够将这个字段标记为搜索,那么斯隆的this post就是一个很好的例子。使用multi-field为字段保留两个不同的映射在Elasticsearch中非常常见。

希望这有帮助,请告诉我是否可以提供更多解释。

答案 1 :(得分:4)

如果您希望排序不区分大小写"index": "not_analyzed"不起作用,那么我已经创建了一个自定义排序分析器。

索引settings.yml中

index :   
    analysis :
        analyzer :
            sort :
                type : custom
                tokenizer : keyword
                filter : [lowercase]

映射:

...
"articleName": {
    "type": "string",
    "analyzer": "standard",
    "fields": {
        "sort": {
            "type": "string",
            "analyzer": "sort"
        }
    }
}
...