如何在elasticsearch中对价格字符串排序?

v6ylcynt  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(245)

在我的例子中,我试图排序,但没有成功。我的问题是因为我的价格是字符串,价格是这样的=>1.300,00。当我对字符串价格进行排序时,我将其作为示例。0,00 | 1,00 | 1.000,00 | 2,00。我想用双精度格式排序或类似的格式。我该怎么做?

2o7dmzc5

2o7dmzc51#

保持沉默不是一个好主意 Price 作为ElasticSearch中的关键词,最好的方法是Map price 作为 scaled float 在这样的搜索中:
新Map:

PUT [index_name]/_mapping
{
  "properties": {
    "price2": {
      "type": "scaled_float",
        "scaling_factor": 100
    }
  }
}

要解决您的问题,您可以添加新Map并将值从 stringnumeric 价值:
按查询更新:

POST [index_name]/_update_by_query
{
    "query": {
        "match_all": {}
    }, 
    "script": {
       "source": "ctx._source['price2'] = ctx._source['price'].replace(',','')"
    }
}

此查询将转换您的 keyword 重视 string 并将其Map到另一个名为 price2 ,那么您需要有一个 ingest pipeline 要对新条目执行此过程,请执行以下操作:
摄取管道:

POST _ingest/pipeline/_simulate
{
  "pipeline": {
    "processors": [
      {
        "script": {
          "description": "Extract 'tags' from 'env' field",
          "lang": "painless",
          "source": "ctx['price2'] = ctx['price'].replace(',','')"
        }
      }
    ]
  },
  "docs": [
    {
      "_source": {
        "price": "5,000.00"
      }
    }
  ]
}

您需要删除 _simulate 再加上这个 ingest pipeline 到你的索引。

相关问题