我的问题:
如何基于汇总返回结果?
使用Elasticsearch Cloud和MongoDB Atlas(MongoDB的云版本) 在Elasticsearch中具有以下与该用例相关的字段:
Title
Description_Short
MainCat
ItemCat
如果用户在我页面的“输入”字段中键入内容,则运行以下查询:
async function asyncSearch(query) {
return new Promise((resolve, reject) => {
Product.esSearch(
{
from: 0,
size: 25,
query: {
multi_match: {
query: query.suche,
fields: ["Title", "Description_Short"],
}
},
"aggs": {
"itemCats": {
"terms": { "field" : "ItemCat" }
}
},
},
{},
async (err, results) => {
if (err) throw err;
let res = await results;
console.log("-------------Results---------------");
console.log(res.aggregations.itemCats.buckets);
console.log("-----------------------------------------");
res = results.hits;
resolve(res);
}
);
}); }
该函数查询es-db并返回结果(即,如果您搜索“ Smart-TV”,您将获得与“ Smart-TV”相关的所有内容,甚至是“ Smart-TV-Remote-Controller或“ Smart-TV” -Sticks”,这没错,但不是我想要的结果。
目标是列出所有“智能电视”的原因,这就是我们期望的 我们搜索这样的术语。
在下面的屏幕截图中,您可以看到“ ItemCat”键,代表“ ItemCategory”。
Aggregation of ItemCategories(ItemCats) <-抱歉,不允许将图像直接插入我的帖子中->
如您在图像中看到的,我们有带有“ doc_count:596”的“ key:TV-Geräte”。那意味着, 想法如下:
“搜索”:
"Title",
"Description_Short"
“汇总结果”基于:
"ItemCategory"
“根据排序结果”:
"count of ItemCategory"
并返回结果。
在此示例中,它可能意味着: 1.搜索Smart-TV 2.返回汇总结果 3.根据596个文档返回结果
实际上,我不确定这是否是正确的方法,也不确定是否可行,因此非常感谢您的帮助和解释。
谢谢