Php Elasticsearch排序,用另一个字段替换缺少的字段
我有一些产品想按价格分类。他们有两个属性,产品价格和特殊价格 特殊价格并不总是出现在单据中。在阅读文档时,您可以添加一个缺少的元素,并让它对此进行搜索 我在请求中添加了以下内容:Php Elasticsearch排序,用另一个字段替换缺少的字段,php,
elasticsearch,Php,
elasticsearch,我有一些产品想按价格分类。他们有两个属性,产品价格和特殊价格 特殊价格并不总是出现在单据中。在阅读文档时,您可以添加一个缺少的元素,并让它对此进行搜索 我在请求中添加了以下内容: "sort" : [ { "special_price" : {"missing" : "product_price"} }, ], 文件规定: missing参数指定缺少该字段的文档的方式 应处理:缺少的值可以设置为_last、_first或a 将用于缺少文档的自定义值作为排序值 我还尝试将回退值指
"sort" : [
{ "special_price" : {"missing" : "product_price"} },
],
文件规定:
missing参数指定缺少该字段的文档的方式
应处理:缺少的值可以设置为_last、_first或a
将用于缺少文档的自定义值作为排序值
我还尝试将回退值指定为
"sort" : [
{ "special_price" : {"missing" : "doc['product_price'].value"} },
],
我看不出这里缺少了什么?缺少支持三个值,即最后一个值、第一个值或一个自定义值和一个数字。不能将其他字段指定为缺少参数的值。由于您希望回退到不同字段的值,因此可以使用
因此,排序可以定义为:
{
"sort": {
"_script": {
"type": "number",
"script": {
"lang": "painless",
"source": "if(doc['special_price'].size() != 0) { return doc['special_price'].value; } return doc['product_price'].value;"
},
"order": "desc"
}
}
}
为了解决这个问题,我在文档中添加了一个名为“sale_price”的新字段。然而,这并不理想。如果有人能提供更好的解决方案,我将不胜感激。谢谢。这解决了我的问题。在测试中,脚本排序似乎需要一些时间。为了实现我设定的目标,我坚持使用额外的字段排序。