使用tokenizer进行弹性搜索排序问题

时间:2015-02-17 07:16:15

标签: elasticsearch kendo-grid

我使用的是KendoGrid,数据源来自弹性搜索。当我按名称排序时,弹性搜索为我提供了一些意想不到的结果。经过分析,我观察到如果按任意顺序上升/下降排序,弹性搜索将字符串拆分为单词,在这些单词中,它正在寻找分别以较低/较高值开头的单词。例如。

Again Test for Hard bounce check
Campaign Sender Test
Test SMTP 2
Test SMTP 1
Test Campaign34
Test Campaign345
Campaign Test mergervars
Link test
Failed Test

上面列表中的第一项"再次测试硬弹跳检查"已分为5个单词,因为"测试"以T开头,它首先出现在列表中。

但是,我不想这样排序。我想从字符串的开头排序。我怎么做。

我假设我必须通过tokenizer处理它,但不知道该怎么做。请帮忙。

1 个答案:

答案 0 :(得分:1)

排序发生在逆逆索引上,更好地称为fielddata缓存。这里出现的数据是在标记化之后。 如果您想要预先设置搜索功能并对该字段进行排序,那么我强烈建议您使用multi fields

"title": {
    "type": "string",
    "fields": {
        "sort":   { "type": "string", "index": "not_analyzed" }
    }
}

现在我们在内部有两个标题字段字段。 title字段和title.sort。 使用title.sort字段,因为它具有确切的字符串。