[英]Elastic search query find exact match of values in the list from regexp input parameter
My data looks like below: 我的数据如下所示:
{
"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"]
}
Now, i am trying to write elastic search query using elasticsearch_dsl
python module by importing Q
from it. 现在,我试图通过从中导入Q
来使用elasticsearch_dsl
python模块编写弹性搜索查询。
My input query will be some regex
on "name_gr"
. 我的输入查询将是"name_gr"
上的一些regex
。 For eg: "name_gr": "gr[12]"
. 例如: "name_gr": "gr[12]"
。 So, in this case I want all the names which has both "gr1" and "gr2" in their list of "name_gr". 因此,在这种情况下,我希望所有在“ name_gr”列表中同时具有“ gr1”和“ gr2”的名称。
So, the result for -> 所以,结果为->
Example 1 : "name_gr": "gr[12]"
will be : 示例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"]
}
because, gr1 and gr2 both are present in name1, name2 and name4. 因为gr1,gr2都存在于name1,name2和name4中。
Example 2: "name_gr": "gr.*"
will be : 示例2: "name_gr": "gr.*"
将为:
{
"name": "name4",
"name_gr": ["gr1","gr2","gr3","gr4"]
}
because, all the gr's (gr1,gr2,gr3,gr4) are present in name4 only. 因为所有gr(gr1,gr2,gr3,gr4)仅存在于name4中。
I tried writing my query like below: 我尝试像下面这样编写查询:
must = [{'match':{'regexp': {'name_gr': 'gr[12]'}}}]
result = Q('bool', must = must)
But it gives name3 also in result, which is invalid as both gr1 and gr2 are not present in it. 但是它也给出了name3,这是无效的,因为gr1和gr2都不存在。 Please help. 请帮忙。 I am stuck in this from few days now. 从现在开始,我一直陷入困境。
Thanks. 谢谢。
You are using a match
query in your example where you want to be using regexp
instead. 您要在示例中使用match
查询,而您想改用regexp
。 To do this just use: 为此,只需使用:
s = Search().query('regexp', name_gr='gr[12]')
s.execute()
Hope this helps! 希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.