使用打字稿将 elasticjs 查询转换为节点应用程序中的本机弹性搜索 DSL 查询
Converting the elasticjs query to native elastic search DSL query in node app using typescript
我正在尝试转换使用弹性 js 完成的查询,它是全尺寸库,因为自 2014 年以来全尺寸库已经有一段时间没有更新了。我想将使用全尺寸编写的所有查询转换为本机弹性搜索 DSL。我在做的时候遇到了一个小问题。
这是下面的样子
function getFilterNative(field: string, type: string, values: string[]): any {
if (type === "equals") {
return ejs.TermFilter(field, values[0].toLowerCase());
}
var arrFilter: Array<any> = [];
for (var i in values) {
arrFilter.push(ejs.TermFilter(field, values[i].toLowerCase()));
}
return ejs.OrFilter(arrFilter);
}
我正在努力实现这样的目标
function getFilterNative(field: string, type: string, values: string[]): any {
if (type === "equals") {
//return ejs.TermFilter(field, values[0].toLowerCase());
var termFilter ={
"term":{}
//error in here when compiling the ts file
//error TS2403: Subsequent variable declarations must have the same type. Variable 'termFilter' must be of type '{ "term": {}; }', but here has type '{ terms: { field: string; }; }'.
};
termFilter["term"][field] = values[0].toLowerCase();
}
var orFilter = {filter:
{
or: {
filters: []
}
}};
var arrFilter: Array<any> = [];
for (var i in values) {
var termFilter = {
terms: {
field: values[i].toLowerCase()
}
};
arrFilter.push(termFilter)
//arrFilter.push(ejs.TermFilter(field, values[i].toLowerCase()));
}
orFilter.filter.or.filters = arrFilter;
return orFilter;
//return ejs.OrFilter(arrFilter);
}
如有任何帮助,我们将不胜感激。
在我尝试了如何为我工作的解决方案后,我愿意接受建议,使我的答案更好。
function getFilterNative(field: string, type: string, values: string[]): any {
if (type === "equals") {
var filterVal: { [k: string]: any } = {};
filterVal[field] = values[0].toLowerCase();
var termFilter = {
term: filterVal
};
return termFilter;
};
var orFilter = {
filter:
{
or: {
filters: []
}
}
};
var arrFilter: Array<any> = [];
for (var i in values) {
var filterVal: { [k: string]: any } = {};
filterVal[field] = values[i].toLowerCase()
var termFilter = {
term: filterVal
};
arrFilter.push(termFilter)
}
orFilter.filter.or.filters = arrFilter;
return orFilter;
}
我正在尝试转换使用弹性 js 完成的查询,它是全尺寸库,因为自 2014 年以来全尺寸库已经有一段时间没有更新了。我想将使用全尺寸编写的所有查询转换为本机弹性搜索 DSL。我在做的时候遇到了一个小问题。 这是下面的样子
function getFilterNative(field: string, type: string, values: string[]): any {
if (type === "equals") {
return ejs.TermFilter(field, values[0].toLowerCase());
}
var arrFilter: Array<any> = [];
for (var i in values) {
arrFilter.push(ejs.TermFilter(field, values[i].toLowerCase()));
}
return ejs.OrFilter(arrFilter);
}
我正在努力实现这样的目标
function getFilterNative(field: string, type: string, values: string[]): any {
if (type === "equals") {
//return ejs.TermFilter(field, values[0].toLowerCase());
var termFilter ={
"term":{}
//error in here when compiling the ts file
//error TS2403: Subsequent variable declarations must have the same type. Variable 'termFilter' must be of type '{ "term": {}; }', but here has type '{ terms: { field: string; }; }'.
};
termFilter["term"][field] = values[0].toLowerCase();
}
var orFilter = {filter:
{
or: {
filters: []
}
}};
var arrFilter: Array<any> = [];
for (var i in values) {
var termFilter = {
terms: {
field: values[i].toLowerCase()
}
};
arrFilter.push(termFilter)
//arrFilter.push(ejs.TermFilter(field, values[i].toLowerCase()));
}
orFilter.filter.or.filters = arrFilter;
return orFilter;
//return ejs.OrFilter(arrFilter);
}
如有任何帮助,我们将不胜感激。
在我尝试了如何为我工作的解决方案后,我愿意接受建议,使我的答案更好。
function getFilterNative(field: string, type: string, values: string[]): any {
if (type === "equals") {
var filterVal: { [k: string]: any } = {};
filterVal[field] = values[0].toLowerCase();
var termFilter = {
term: filterVal
};
return termFilter;
};
var orFilter = {
filter:
{
or: {
filters: []
}
}
};
var arrFilter: Array<any> = [];
for (var i in values) {
var filterVal: { [k: string]: any } = {};
filterVal[field] = values[i].toLowerCase()
var termFilter = {
term: filterVal
};
arrFilter.push(termFilter)
}
orFilter.filter.or.filters = arrFilter;
return orFilter;
}