在我的例子中,我试图排序,但没有成功。我的问题是因为我的价格是字符串,价格是这样的=>1.300,00。当我对字符串价格进行排序时,我将其作为示例。0,00 | 1,00 | 1.000,00 | 2,00。我想用双精度格式排序或类似的格式。我该怎么做?
2o7dmzc51#
保持沉默不是一个好主意 Price 作为ElasticSearch中的关键词,最好的方法是Map price 作为 scaled float 在这样的搜索中:新Map:
Price
price
scaled float
PUT [index_name]/_mapping { "properties": { "price2": { "type": "scaled_float", "scaling_factor": 100 } } }
要解决您的问题,您可以添加新Map并将值从 string 到 numeric 价值:按查询更新:
string
numeric
POST [index_name]/_update_by_query { "query": { "match_all": {} }, "script": { "source": "ctx._source['price2'] = ctx._source['price'].replace(',','')" } }
此查询将转换您的 keyword 重视 string 并将其Map到另一个名为 price2 ,那么您需要有一个 ingest pipeline 要对新条目执行此过程,请执行以下操作:摄取管道:
keyword
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 到你的索引。
_simulate
1条答案
按热度按时间2o7dmzc51#
保持沉默不是一个好主意
Price
作为ElasticSearch中的关键词,最好的方法是Mapprice
作为scaled float
在这样的搜索中:新Map:
要解决您的问题,您可以添加新Map并将值从
string
到numeric
价值:按查询更新:
此查询将转换您的
keyword
重视string
并将其Map到另一个名为price2
,那么您需要有一个ingest pipeline
要对新条目执行此过程,请执行以下操作:摄取管道:
您需要删除
_simulate
再加上这个ingest pipeline
到你的索引。