我有一个 ElasticSearch 脚本,我需要以某种方式将其存储在某个地方,
我尝试使用反引号 "`script here`"
但它在使用字符串时添加了转义字符,
我按以下方式存储脚本 -
sortByPriceScript : `"""
double valueForComparision = 0;
if(doc.currency.value == 'usd'){
valueForComparision = doc.price.value;
}
else{
if(params.isUsdCheckout){
valueForComparision = doc.price.value / params[doc.currency.value]["buy"];
}
else{
valueForComparision = doc.price.value / params[doc.currency.value]["spot"];
}
}
return valueForComparision;
"""`
它被转换成 -
"\"\"\"\n double valueForComparision = 0;\n\n if(doc.currency.value == 'usd'){\n valueForComparision = doc.price.value;\n }\n else{\n if(params.isUsdCheckout){\n valueForComparision = doc.price.value / params[doc.currency.value][\"buy\"];\n }\n else{\n valueForComparision = doc.price.value / params[doc.currency.value][\"spot\"];\n }\n }\n return valueForComparision;\t\t\n \"\"\""
如何使用以下格式的脚本 -
GET listings/_search
{
"query": {
"function_score": {
"query": {
"constant_score": {
"filter": {
"bool": {
"must": [{
"match": {
"products_status": "1"
}
}, {
"match": {
"show_listing": "true"
}
}, {
"script": {
"script": {
"source": "doc['forecast_quantity'].value > doc['minimum_quantity'].value",
"params": {}
}
}
}],
"should": [{
"term": {
"seller_id": "1"
}
}, {
"term": {
"seller_id": "2"
}
}]
}
}
}
},
"functions": [{
"script_score": {
"script": {
"params": {
"id": 1,
"updated_at": 1565855175,
"usd": {
"buy": 1,
"sell": 1,
"spot": 1
},
"sgd": {
"buy": 0.72,
"sell": 0.72,
"spot": 0.72
},
"myr": {
"buy": 0.24,
"sell": 0.24,
"spot": 0.24
},
"inr": {
"buy": 0.014,
"sell": 1.014,
"spot": 0.014
},
"eur": {
"buy": 1.12,
"sell": 1.12,
"spot": 1.12
},
"isUsdCheckout": false
},
"source": """
double valueForComparision = 0;
if(doc.currency.value == 'usd'){
valueForComparision = doc.price.value;
}
else{
if(params.isUsdCheckout){
valueForComparision = doc.price.value / params[doc.currency.value]["buy"];
}
else{
valueForComparision = doc.price.value / params[doc.currency.value]["spot"];
}
}
return valueForComparision;
"""
}
}
}]
}
},
"sort": [{
"_score": {
"order": "desc"
}
}]
}
最佳答案
三引号 """
仅在 Kibana Dev Tools 中有效,您不能在 JavaScript 代码中使用它。
在 JS 代码中,您可以简单地使用反引号而不使用三引号:
esClient.search({
index: 'index',
size: 10,
body: {
query: {
script: {
script: {
source: `
double valueForComparision = 0;
if(doc.currency.value == 'usd'){
valueForComparision = doc.price.value;
}
else{
if(params.isUsdCheckout){
valueForComparision = doc.price.value / params[doc.currency.value]["buy"];
}
else{
valueForComparision = doc.price.value / params[doc.currency.value]["spot"];
}
}
return valueForComparision;
`
}
}
}
}
}, function(err, res) {
console.log(res);
});
关于javascript - 如何将脚本存储在字符串中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57622766/