[英]Elastic search query find exact match of values in the list from regexp input parameter
我的數據如下所示:
{
"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"]
}
現在,我試圖通過從中導入Q
來使用elasticsearch_dsl
python模塊編寫彈性搜索查詢。
我的輸入查詢將是"name_gr"
上的一些regex
。 例如: "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都不存在。 請幫忙。 從現在開始,我一直陷入困境。
謝謝。
您要在示例中使用match
查詢,而您想改用regexp
。 為此,只需使用:
s = Search().query('regexp', name_gr='gr[12]')
s.execute()
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.