我有一个 Json 对象
const mainString = {
bool: {
should: [{
nested: {
path: "employee",
query: {
bool: {
must: [NAME_QUERIES]
}
}
}
}, NICK_NAME_QUERIES],
minimum_should_match: 1
}
}
其中
NAME_QUERIES
和 NICK_NAME_QUERIES
是 json 对象,由用户输入。
例如:
NAME_QUERIES = [{
multi_match: {
query: "fname1 lname1",
fields: ["employee.name"],
type: "phrase"
}
}, {
multi_match: {
query: "fname2 lname2",
fields: ["employee.name"],
type: "phrase"
}
}]
NICK_NAME_QUERIES = [{
multi_match: {
query: "fname1 lname1",
fields: ["employee.nickName"],
type: "phrase"
}
}, {
multi_match: {
query: "fname2 lname2",
fields: ["employee.nickName"],
type: "phrase"
}
}]
如何替换
NAME_QUERIES
中的 NICK_NAME_QUERIES
和 mainString
?
我想要
mainString
的 o/p,如下所示
{
bool: {
should: [{
nested: {
path: "employee",
query: {
bool: {
must: [{
multi_match: {
query: "fname1 lname1",
fields: ["employee.name"],
type: "phrase"
}
}, {
multi_match: {
query: "fname2 lname2",
fields: ["employee.name"],
type: "phrase"
}
}]
}
}
}
}, {
multi_match: {
query: "fname1 lname1",
fields: ["employee.nickName"],
type: "phrase"
}
}, {
multi_match: {
query: "fname2 lname2",
fields: ["employee.nickName"],
type: "phrase"
}
}],
minimum_should_match: 1
}
}
NAME_QUERIES
可以包含N个multi_match,在上面的例子中只添加了2个
我尝试直接在字符串中添加
NAME_QUERIES
和 NICK_NAME_QUERIES
,但它添加了 [] 。
我还尝试使用 jsonStringify,然后使用该变量,然后它为所有字段添加双引号,例如(“multi_match”),而我想要的键没有引号。
有没有简单的方法来替换主字符串中不带 [] 的它们?
您需要通过将占位符字符串 NAME_QUERIES 和 NICK_NAME_QUERIES 替换为实际的 JSON 对象来构建 JSON 对象
// Actual JSON strings
const NAME_QUERIES_JSON = '[{ "multi_match": { "query": "fname1
lname1", "fields": ["employee.name"], "type": "phrase" } },{ "multi_match": { "query": "fname2 lname2", "fields": ["employee.name"], "type": "phrase" } }]';
const NICK_NAME_QUERIES_JSON = '[{ "multi_match": { "query": "fname1 lname1", "fields": ["employee.nickName"], "type": "phrase" } },{ "multi_match": { "query": "fname2 lname2", "fields": ["employee.nickName"], "type": "phrase" } }]';
// Convert JSON strings to JavaScript objects
const NAME_QUERIES = JSON.parse(NAME_QUERIES_JSON);
const NICK_NAME_QUERIES = JSON.parse(NICK_NAME_QUERIES_JSON);
const mainString = {
bool: {
should: [
{
nested: {
path: "employee",
query: {
bool: {
must: NAME_QUERIES
}
}
}
},
...NICK_NAME_QUERIES
],
minimum_should_match: 1
}
};
console.log(JSON.stringify(mainString, null, 2));