簡體   English   中英

彈性搜索查詢從regexp輸入參數中查找列表中值的完全匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM