我的数据如下所示:
{
"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
。
我的输入查询将regex
在"name_gr"
. 例如:"name_gr": "gr[12]"
. 因此,在这种情况下,我想要在“name_gr”列表中同时包含“gr1”和“gr2”的所有名称。
所以,结果为 ->
示例 1:"name_gr": "gr[12]"
将是:
{
"name": "name1",
"name_gr": ["gr1","gr2"]
},
{
"name": "name2",
"name_gr": ["gr1","gr2"]
},
{
"name": "name4",
"name_gr": ["gr1","gr2","gr3","gr4"]
}
因为 gr1 和 gr2 都存在于 name1、name2 和 name4 中。
示例 2:"name_gr": "gr.*"
将是:
{
"name": "name4",
"name_gr": ["gr1","gr2","gr3","gr4"]
}
因为,所有的 gr (gr1,gr2,gr3,gr4) 只存在于 name4 中。
我尝试编写如下查询:
must = [{'match':{'regexp': {'name_gr': 'gr[12]'}}}]
result = Q('bool', must = must)
但它在结果中也给出了 name3,这是无效的,因为 gr1 和 gr2 都不存在于其中。请帮忙。从现在开始,我就陷入了困境。
谢谢。