我将通过节点js从前端接收过滤器输入,其中一些可能为null或为空,但是在elasticsearch查询过滤器中,所有字段均应存在。即使某些过滤器的输入为空,如何获得响应?
elasticClient.search({
index: 'pubmed-index',
type: 'pubmed-paper',
body: {
query: {
bool: {
must: {
match: {
Abstract: `${searchKeyword}`
}
},
filter:
{"or":[{
term:
{
"Publication Type": `${searchPublicationType}`
}},
{
"range": {
"Date Completed": {
"gte" :`${searchGreaterYear}||/y`,
"lte" : `${searchLesserYear}||/y`,
"format" :"yyyy"
}
}
}
]}
}
}
}
}).then(function (resp) {
console.log(resp.hits.hits);
return res.json(resp.hits.hits)
}, function (err) {
console.log(err.message);
return res.json(err.message)
});
如果缺少任何字段,我需要输出出版物类型或完成日期
答案 0 :(得分:0)
我建议您看一下Elasticsearch提供的search template功能。
它使用mustache作为模板语言,并允许使用例如条件子句:
{
"query": {
"bool": {
"must": {
"match": {
"line": "{{text}}"
}
},
"filter": {
{{#line_no}}
"range": {
"line_no": {
{{#start}}
"gte": "{{start}}"
{{#end}},{{/end}}
{{/start}}
{{#end}}
"lte": "{{end}}"
{{/end}}
}
}
{{/line_no}}
}
}
}
}
还有更多选择。
在类似情况下,我在生产中使用了它-当用户未为其添加任何值时,省略一些过滤器。