Как создать запрос ElasticSearch, чтобы получить эту информацию? - PullRequest
2 голосов
/ 21 сентября 2019

Мне нужно запросить индекс ElasticSearch через модуль Python, и я довольно незнаком с ElasticSearch.Скажем, мой индекс хранит пары людей и некоторую информацию о каждой паре.Интересно, как создать запрос ElasticSearch, который дал бы мне пару ниже.По сути, я хочу получить значение поля some info из пары, где person1 названо John White, а teacher и person2 названо Sarah Black и doctor.Я хочу точное совпадение, а не нечеткое.

"person1": {
    "name": "John White",
    "job": "teacher"

}
"person2": {
    "name": "Sarah Black",
    "job": "doctor"
}
"some info": "blah blah"

Я пробовал ниже запрос, но он дает мне пары, где только 1 из пар соответствует информации, которую я запрашиваю, имя / должность другого человека может бытьОчень разные.Как получить точное совпадение, где информация о людях совпадает?

  "query": {
    "bool" : {
        "must": {
            "bool" : {
                "should": [
                    { "match": { "person1.name": "John White" }},
                    { "match": { "person1.job": "teacher" }}
                  ],
                "should": [
                    { "match": { "person2.name": "Sarah Black" }},
                    { "match": { "person2.job": "doctor" }}
                  ]
            }
        }
    }
  }

1 Ответ

1 голос
/ 22 сентября 2019

Попробуйте вот так

Отображение для вашего индекса

{
  "settings": {
    "analysis": {
      "normalizer": {
        "lc_normalizer": {
          "type": "custom",
          "filter": ["lowercase"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "person1": {
        "properties": {
          "name": {
            "type": "text",
            "fields": {
              "exact": {
                "type": "keyword",
                "normalizer": "lc_normalizer"
              }
            }
          },
          "job": {
            "type": "keyword"
          }
        }
      },
      "person2": {
        "properties": {
          "name": {
            "type": "text",
            "fields": {
              "exact": {
                "type": "keyword",
                "normalizer": "lc_normalizer"
              }
            }
          },
          "job": {
            "type": "keyword"
          }
        }
      },
      "some_info": {
        "type": "text"
      }
    }
  }
}

Запрос

{
  "query": {
    "bool": {
      "must": [
        {"match": {
          "person1.name.exact": "john white"
        }},
        {"match": {
          "person2.name.exact": "Sarah Black"
        }},
        { "term": { "person1.job": "teacher"}},
        { "term": { "person2.job": "doctor"}}
      ]
    }
  }
}

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...