【问题标题】:Elasticsearch weird sort resultsElasticsearch 奇怪的排序结果
【发布时间】:2013-12-10 10:41:01
【问题描述】:

我有一些数据存储在带有轮胎的弹性搜索中。假设我有这样的数据: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 

按升序排列:

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"}}

有什么提示吗?

【问题讨论】:

  • 无论如何,你检查过this吗?

标签: elasticsearch tire


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 要添加到此,如果您希望稍后对其进行排序,您应该将字段设置为not_analyzed。分析可能包括停用词删除和词干提取,这会打乱您的排序(尤其是名称等专有名词)
    猜你喜欢
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 2013-01-26
    • 1970-01-01
    • 2018-02-11
    • 2013-12-12
    • 1970-01-01
    相关资源
    最近更新 更多