Сопоставление списков с помощью elasticsearch

#python #elasticsearch

#python #elasticsearch

Вопрос:

В mongodb есть список, например:

 db_name = "Test"
collection_name = "Map"
db.Map.findOne()

{
  "_id" : ObjectId(...),
  "Id" : "576",
  "FirstName" : "xyz",
  "LastName" : "abc",
  "skills" : [
               "C  ",
               "Java",
               "Python",
               "MongoDB",
             ]
}
  

В индексе elastcisearch есть список (я использую kibana для выполнения запросов)

 GET /user/_search

{
  "took" : 31,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 7,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "customer",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : 1.0,
        "_source" : {
          "name" : "xyz abc"  
          "Age" : 21,
          "skills" : [
                        "C  ",
                        "Java",
                        "Python",
                        "MongoDB", 
                     ]  
        }
      }, 
     ]
    }
}
  

Кто-нибудь может помочь с запросом elasticsearch, который будет сопоставлять обе записи на основе навыков.
Я использую Python для написания кода

Если совпадение найдено, я пытаюсь получить имя и фамилию этого пользователя

 First name : "xyz"
Last name : "abc"
  

Комментарии:

1. Какие две записи вы хотите сопоставить и на основе каких навыков? Индексируются ли обе записи в elastic search? Что такое сопоставление по индексу? Пожалуйста, будьте более понятны в этих вопросах.

2. Одна запись находится в mongodb, а другая в elasticsearch. Я хочу сопоставить обе записи на основе всего списка навыков. Если весь список навыков совпадает, тогда возвращаются только имя и фамилия

3. Mongodb и elasticsearch полностью отличаются с точки зрения схемы, хранилища, способа запроса и т.д. Обе записи должны быть в индексе elasticsearch, чтобы к ним можно было запрашивать.

4. Предполагая, что обе записи находятся в одном и том же индексе эластичного поиска, каким будет запрос для сопоставления обеих записей на основе всего списка навыков

5. Просто уточнение; все навыки должны совпадать или какой-либо из заданных навыков?

Ответ №1:

Предполагая, что вы индексируете весь документ в elastic, и из них вы хотите сопоставить документы, в которых skills есть оба java , и mongodb запрос будет иметь вид:

 {
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "skills": "mongodb"
          }
        },
        {
          "term": {
            "skills": "java"
          }
        }
      ]
    }
  }
}
  

Комментарии:

1. @Kiran: Помогло ли это вам?