1

我有一个在 Angular js、Node.js、MongoDB 中开发的具有弹性搜索集成的聊天应用程序。我为聊天提供了搜索功能,用户可以输入任何组合。选项是聊天消息、用户和日期。

所以我想在 nodejs 的帮助下使用多个字段组合在弹性搜索数据库中进行搜索。例如,1) 使用 username='mohan' 和 date='anydate' 进行搜索,2) username='mohan' 和 chatmessage='Hi there'。

所以结果应该同时满足这两个条件。

我们如何使用 mongoosastic 实现这一目标?我尝试使用以下查询。但它给出了 OR 条件的结果,我想要 AND 条件。

{
    "query": {
        "bool": {
            "should": [{
                "match": {
                    "feedMsg": "Hi there"
                }
            }, {
                "match": {
                    "userId": 'mohan'
                }
            }, {
                "range": {
                    "feedTime": {
                        "from": '27/10/2016',
                        "to": '27/10/2016'
                    }
                }
            }]
        }
    }
}
4

2 回答 2

1

我找到了解决方案。带有必须的布尔查询对我有用。

{
   "bool" : {
      "must" :     [],
      "should" :   [],
      "must_not" : [],
      "filter":    []
   }
}
  1. must- 所有这些子句都必须匹配。相当于 AND。
  2. must_not - 所有这些子句都不能匹配。相当于NOT。
  3. 应该 - 这些子句中至少有一个必须匹配。相当于 OR。
  4. filter - 必须匹配但在非评分过滤模式下运行的子句。
于 2016-10-31T06:31:18.310 回答
0

您应该使用这种格式,它确实有效...

 var query = {
    query_string: {
      filtered: {
        query: {
          multi_match: {
            query: req.query.q, // or anything you will put here
          }
        },
        filter: {
          term: {
            'field': value
          }
        }
      }
    }
  }
于 2016-12-05T12:28:56.430 回答