我有一个对象
const mainString = {
bool: {
should: [{
nested: {
path: "employee",
query: {
bool: {
must: [NAME_QUERIES]
}
}
}
}, NICK_NAME_QUERIES],
minimum_should_match: 1
}
}
其中
NAME_QUERIES
和 NICK_NAME_QUERIES
是对象,由用户输入。
例如:
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 string
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));