我的数据如下:
{
"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
导入Q
来使用regex
python模块编写弹性搜索查询。
我的输入查询将是"name_gr"
上的一些"name_gr": "gr[12]"
。例如:"name_gr": "gr[12]"
。
因此,在这种情况下,我希望所有在“ name_gr”列表中同时具有“ gr1”和“ gr2”的名称。
所以,->
的结果示例1: {
"name": "name1",
"name_gr": ["gr1","gr2"]
},
{
"name": "name2",
"name_gr": ["gr1","gr2"]
},
{
"name": "name4",
"name_gr": ["gr1","gr2","gr3","gr4"]
}
将是:
"name_gr": "gr.*"
因为gr1,gr2都出现在name1,name2和name4中。
示例2: {
"name": "name4",
"name_gr": ["gr1","gr2","gr3","gr4"]
}
将是:
must = [{'match':{'regexp': {'name_gr': 'gr[12]'}}}]
result = Q('bool', must = must)
因为所有gr(gr1,gr2,gr3,gr4)都仅出现在name4中。
我尝试如下编写查询:
node.js
但是它也给出了name3,这是无效的,因为gr1和gr2都不存在。请帮忙。从现在开始,我一直陷入困境。
谢谢。
答案 0 :(得分:1)
您在示例中使用match
查询,而您想使用regexp
。为此,只需使用:
s = Search().query('regexp', name_gr='gr[12]')
s.execute()
希望这会有所帮助!