【问题标题】:Elastic 2.4 wildcard query results order different from insertion orderElastic 2.4 通配符查询结果顺序与插入顺序不同
【发布时间】:2018-06-25 08:06:23
【问题描述】:

当我进行通配符查询时,我得到的结果与插入的顺序不同。例如, 假设我在“名称”字段 Pamela,Patricia,Pandora,Paige 中插入了 4 个项目。

并使用“P*”进行通配符查询。我收到的结果是 Patricia、Pamela、Paige、Pandora。 有什么方法可以让我以与插入相同的顺序获得结果。 预期输出应该是 Pamela,Patricia,Pandora,Paige。 结果的排序也因机器而异。

我使用的是弹性搜索 2.4 版。我想在同一版本上执行此操作,因为它正在生产中。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    在创建索引时,您必须添加时间戳映射,您可以使用以下查询来做到这一点

    PUT my_index
    {
      "mappings": {
        "my_type": {
          "_timestamp": { 
            "enabled": true
          }
        }
      }
    }
    

    之后,您可以使用此时间戳进行查询,如下所示

    GET my_index/_search
    {
      "query": {
        "wildcard": {
          "fieldName": "P*"
        }
      },
      "sort": [
        {
          "_timestamp": {
            "order": "asc"
          }
        }
      ]
    }
    

    注意:这个 _timestamp 在最新版本的 elasticsearch 中已被弃用和删除,如果您有任何升级 elasticsearch 的计划,那么您应该在索引和更新时添加一个新的字段时间戳,并且应该对该字段进行排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 2013-01-19
      相关资源
      最近更新 更多