2017-02-15 38 views
0

我请求你解决问题。实施项目elasticsearch。我在这里有一种不适合的方式。我希望你能帮我解决这个问题。Elasticsearch使用UTF8值排序错误

这里是我的映射:

http://pastebin.com/qgiJ9hH1

这里是发送到弹性弯曲身体:

{ 
    "body": { 
        "from", "0", 
        "fize": "25" 
        "sort": { 
            "spolka_text" { 
                "order": "desc" 
            } 
        } 
        "query": { 
            "bool": { 
                "should": [{ 
                        "term": { 
                            "wprowadzajacy_value": 6001 
                        } 
                    }] 
                "must": [{ 
                        "term": { 
                            "deleted": 0 
                        } 
                    }, { 
                        "range": { 
                            "data_wprowadzenia_text" { 
                                "Gte": "2012-01-01" 
                                "Lte", "2017-02-15" 
                            } 
                        } 
                    }, { 
                        "terms": { 
                            "proces_platnosci_value" [ "4"] 
                        } 
                    }] 
            } 
        } 
    } 
} 

和这里的结果:

https://ibin.co/3CSkKOqYujF9.png

等等它应该是:

https://ibin.co/3CSkikjWU8Tg.png

我真的使用5.2版本elasticsearch。

任何想法,为什么我``得到了回应?

好吧,我解决的问题提供帮助和建议@Mysterion的:

这里是新的映射:

http://pastebin.com/wWkmjGs7

和新的查询:

{ 
    "body": { 
     "from", "0", 
     "fize": "25" 
     "sort": { 
      "spolka_text.raw" { 
       "order": "desc" 
      } 
     } 
     "query": { 
      "bool": { 
       "should": [{ 
         "term": { 
          "wprowadzajacy_value": 6001 
         } 
        }] 
       "must": [{ 
         "term": { 
          "deleted": 0 
         } 
        }, { 
         "range": { 
          "data_wprowadzenia_text" { 
           "gte": "2012-01-01" 
           "lte", "2017-02-15" 
          } 
         } 
        }, { 
         "terms": { 
          "proces_platnosci_value" [ "4"] 
         } 
        }] 
      } 
     } 
    } 
} 
+0

在启用fielddata,考虑为什么您使用的是文本字段集合,排序,或脚本。这样做通常没有意义。 – Mysterion

+0

我不明白你现在在想什么 – rad11

+0

你想在文本字段排序,这是一个奇怪的想法,我想,为什么你不想在字符串上排序? – Mysterion

回答

1

一般排序上的文本领域是一个坏主意。因此,我会建议禁用fielddata(),并添加keyword类型的其他字段,这些字段将用于与copy_to的组合进行排序。

E.g.

PUT my_index 
{ 
    "mappings": { 
    "my_type": { 
     "properties": { 
     "my_field": { 
      "type": "text", 
      "fields": { 
      "keyword": { 
       "type": "keyword" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

,并使用my_field搜索,并my_field.keyword排序/聚合