Elasticsearch奇怪的排序结果

时间:2013-12-10 10:41:01

标签: elasticsearch tire

我有一些数据存储在有轮胎的elasticsearch中。假设我有这样的数据:customer_name / amount。

现在,当我按数量排序时,一切都还可以。但是按名称排序时结果是意料之外的:

这些是按名称desc排序的结果:

Lukas Marcus
Visser
Visser
Meik Kalte
Meik Kalte
Kalte Meik
Meik Kalte
Meik Kalte
Cust Imp Mc
Cust Imp Mc
Cust Imp Mc
John Doe
John Doe
Born Joan
Born Joan
Born Joan
Card Image 
Card Image
Card Image 
Aelps_Iso 
Aelps_Iso 

排序asc:

Visser
Visser
Cust Imp Mc 
Card Image
Card Image
Cust Imp Mc
Cust Imp Mc
Aelps_Iso
Aelps_Iso
Born Joan
Born Joan
Born Joan
Card Image
John Doe
John Doe
Meik Kalte
Meik Kalte
Kalte Meik
Meik Kalte
Meik Kalte
Lukas Marcus

请注意,在两种情况下,“Visser都处于最佳位置。”

查询参数:

@filters=[{:term=>{"user_id"=>605}}], 
@sort=[{"customer_name"=>{:order=>"asc"}}

任何提示?

2 个答案:

答案 0 :(得分:3)

我不知道为什么每个人都建议将字段设置为not_analyzed以按名称排序。默认情况下,当您最有可能希望按字母顺序排序并忽略大小写时,not_analyzed字段将按字典顺序排序。

你真正想要的是一个带有关键字标记器和小写过滤器的分析器。

http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/sorting-collations.html

答案 1 :(得分:2)

我认为如果我们正在分析字符串类型的字段,我们就无法对其进行排序。

排序时,相关的排序字段值将加载到内存中。这意味着每个分片应该有足够的内存来包含它们。对于基于字符串的类型,不应分析/标记化排序的字段。对于数字类型,如果可能,建议将类型显式设置为six_hun类型(如short,integer和float)。

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-sort.html#_memory_considerations