gpt4 book ai didi

python - Elasticsearch 查询从 regexp 输入参数中查找列表中值的完全匹配

转载 作者:行者123 更新时间:2023-12-03 01:37:14 27 4
gpt4 key购买 nike

我的数据如下所示:

  {
"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 编写 Elasticsearch 查询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()

希望这可以帮助!

关于python - Elasticsearch 查询从 regexp 输入参数中查找列表中值的完全匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51411541/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com