elasticsearch 使用Firebase手电筒和弹性搜索匹配多个字段
我正在使用来查询我的Firebase数据库 以下是我的数据在Firebase中的结构:elasticsearch 使用Firebase手电筒和弹性搜索匹配多个字段,elasticsearch,firebase,elasticsearch,Firebase,我正在使用来查询我的Firebase数据库 以下是我的数据在Firebase中的结构: posts: { id: { "address": "", "id": "", "name": "", "review": "", "summary": "", }, id: {...} }, users: { uid: { "username": "", "name": "", }, uid: {...} } 以下是我在Flashli
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更新了它。如果它工作正常,如果您愿意接受它,那将是:)