我在弹性搜索中插入了一些如下数据。数据 (name_list) 如下所示。
{
"manage": {
"name_list": [
{
"name": "name1",
"name_gr": ["gr1","gr2"]
},
{
"name": "name2",
"name_gr": ["gr1","gr2"]
},
{
"name": "name3",
"name_gr": ["gr2","gr3"]
},
{
"name": "name4",
"name_gr": ["gr1","gr2","gr3","gr4"]
},
{
"name": "name4",
"name_gr": ["gr4","gr5"]
}
]
}
}
我正在尝试使用elasticsearch_dsl
python 模块编写弹性搜索查询Q
。
我获取与 name_gr regexp -> gr.* 匹配的名称的简单查询如下所示:
{"query":{"regexp":{"name_gr":"gr.*"}}}
查询以获取 name_gr 为“gr5”的名称如下所示:
{"query":{"regexp":{"name_gr":"gr5"}}}
现在,我的问题是:如果我想获取所有 name_gr 为“gr1”和“gr2”的名称,我的查询应该是什么?
例如:假设在这种情况下我的 name_gr 正则表达式将如下所示:
{"regexp":{"name_gr":"gr[12]"}}
现在,我的结果应该包含名称,name1, name2 and name4
因为名称也包含两者gr1 and gr2.
我不知道在这种情况下如何形成查询,我认为我将包含“必须”、“匹配”。但不知道如何形成它。
请帮忙。
PS:
{
"query": {
"bool": {
"must": [
{
"match": {
"name_gr": "gr1"
}
},
{
"match": {
"name_gr": "gr2"
}
}
]
}
}
}
此查询有效,但我的输入可以是正则表达式,例如:我的输入可以是
gr[12],所以我的查询应该是这样的(语法错误,有待修复):
{
"query": {
"bool": {
"must": [
{
"match": {
"regexp": {
"name_gr": "gr[12]"
}
}
}
]
}
}
}
因此,在此查询中,“匹配”部分应在内部解析为 ->
"must": [
{
"match": {
"name_gr": "gr1"
}
},
{
"match": {
"name_gr": "gr2"
}
}
]
}