Elasticsearch /全文查询,具有聚合和基于聚合的排序

时间:2018-12-26 00:24:01

标签: elasticsearch elasticsearch-aggregation elasticsearch-query mongoosastic

我的问题:

  

如何基于汇总返回结果?

使用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个文档返回结果

实际上,我不确定这是否是正确的方法,也不确定是否可行,因此非常感谢您的帮助和解释。

谢谢

0 个答案:

没有答案