弹性搜索查询在regexp输入参数的列表中查找值的精确匹配
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了弹性搜索查询在regexp输入参数的列表中查找值的精确匹配相关的知识,希望对你有一定的参考价值。
我的数据如下所示:
{
"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都不存在。请帮忙。我几天就陷入困境。
谢谢。
答案
您在示例中使用的是match
查询,而您希望使用regexp
。要做到这一点,只需使用:
s = Search().query('regexp', name_gr='gr[12]')
s.execute()
希望这可以帮助!
以上是关于弹性搜索查询在regexp输入参数的列表中查找值的精确匹配的主要内容,如果未能解决你的问题,请参考以下文章