elasticsearch 使用Firebase手电筒和弹性搜索匹配多个字段,elasticsearch,firebase,elasticsearch,Firebase" /> elasticsearch 使用Firebase手电筒和弹性搜索匹配多个字段,elasticsearch,firebase,elasticsearch,Firebase" />

elasticsearch 使用Firebase手电筒和弹性搜索匹配多个字段

elasticsearch 使用Firebase手电筒和弹性搜索匹配多个字段,elasticsearch,firebase,elasticsearch,Firebase,我正在使用来查询我的Firebase数据库 以下是我的数据在Firebase中的结构: posts: { id: { "address": "", "id": "", "name": "", "review": "", "summary": "", }, id: {...} }, users: { uid: { "username": "", "name": "", }, uid: {...} } 以下是我在Flashli

我正在使用来查询我的Firebase数据库

以下是我的数据在Firebase中的结构:

posts: {
  id: {  
   "address": "",
   "id": "",
   "name": "",
   "review": "",
   "summary": "",
  }, id: {...}
}, 
users: {
   uid: {
    "username": "",
    "name": "",
   }, uid: {...}
}
以下是我在Flashlight Node应用程序中设置config.js的方法:

exports.paths = [
   {
      path:  "users",
      index: "firebase",
      type:  "user",
      fields: ["username", "name"]
   },{
      path: "posts",
      index: "firebase",
      type: "post",
      fields: ["id","name","summary","review", "address"]
   }
];
我可以通过发送一个简单的查询字符串来轻松搜索用户,该字符串将搜索用户名和用户名,并返回该用户的uid

我希望能够在post ID数组中循环(基本上只是一个查询循环),并查看其他字段(地址、名称、审阅、摘要)是否与指定的关键字匹配,以及是否使用通配符

因此,搜索必须与post id匹配,并且必须与address、name、review或summary的关键字匹配

这是我尝试过的查询,但我不知道如何执行ORs:

var query = {
  'query': {
    'bool': {
      'must': [
        {'match': {'name': 'duck'}},
        {'match': {'review': 'duck'}},
        {'match': {'summary': 'duck'}},
        {'match': {'address': 'duck'}},
        {'match': {'id': '-K1kiCqGWfM-29pi9wdC'}}
      ]
    }
  }
};

如何形成一个查询来检查id是否与id字段匹配,关键字是否与任何其他字段匹配?

这将是原始JSON查询,但它应该适合您:

{
  "query": {
    "bool": {
      "must": [
        {"match": {"id": "-K1kiCqGWfM-29pi9wdC"}},
        {
          "bool": {
            "should": [
              {"match": {"name": "duck"}},
              {"match": {"review": "duck"}},
              {"match": {"summary": "duck"}},
              {"match": {"address": "duck"}}
            ]
          }
        }
      ]
    }
  }
}
在Elasticsearch中,
表示为
条件

注意,我创建了嵌套bool查询。如果这是SQL,它看起来会像这样:

SELECT *
FROM Document
WHERE id = '-K1kiCqGWfM-29pi9wdC'
  AND (
    address = 'duck'
    OR NAME = 'duck'
    OR review = 'duck'
    OR summary = 'duck'
    );

我是通过以下方式实现的:

  var query = {
     'query': {
      'bool': {
        'must': [
          {'match': {'id': '-K1kiCqGWfM-29pi9wdC'}},
          {'bool': {
            'should': [
              {"match": {"name": "duck"}},
              {"match": {"review": "duck"}},
              {"match": {"summary": "duck"}},
              {"match": {"address": "duck"}}
            ]
          }}
        ]
      }
    }
  };

感谢您为我指明了正确的方向。

谢谢。这看起来正是我所需要的,但即使在修复了开头之后,我仍然会遇到语法错误[应该之后。我已经用正确的JSON更新了它。如果它工作正常,如果您愿意接受它,那将是:)