Как искать в нескольких условиях OR в Elasti c искать в Python - PullRequest
1 голос
/ 18 июня 2020

Мне нужно выполнить поиск всех элементов в массиве вместе со статистикой c детали в elasti c search.

Поля в индексе поиска Elastics: tech_id, detail, volume

tech_ids = ['qwe1', 'qwe2', 'qwe3', 'qwe4', 'qwe5', 'qwe6', 'qwe7']

Количество tech_id в массиве может отличаться. Теперь мой поиск должен выполняться в сочетании tech_id и detail, где tech_id изменяется, а детализация остается неизменной c. Эта комбинация представляет собой комбинацию or. В конце концов, я ожидаю, что поиск будет с предоставленными tech_ids и stati c detail.

tech_ids = ['qwe1', 'qwe2', 'qwe3', 'qwe4', 'qwe5', 'qwe6', 'qwe7']
        "query": {
            "bool": {
                "must": [
                    {
                        "match": {
                            "detail": "calci"
                        }
                    },
                    {
                        "match_phrase": {
                            "tech_id": tech_ids[0]
                        }
                    }]
}

1 Ответ

1 голос
/ 18 июня 2020

То, что вам нужно, я думаю, это bool-should внутри bool-must:

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "detail": "calci"
          }
        },
        {
          "bool": {
            "should": 
              [{
                "match_phrase": { "tech_id": tid }
              } for tid in tech_ids]
          }
        }
      ]
    }
  }
}
...