есть ли какие-либо операции Elasticsearch, близкие к проекции MongDB? - PullRequest
1 голос
/ 12 апреля 2019

я импортировал мой mongodb вasticsearch для выполнения какой-то сложной сортировки, часть его выглядит такзначение в одно поле без вложенности.

возможно ли сделать то же самое вasticsearch?

1 Ответ

0 голосов
/ 13 апреля 2019

Я создал следующие поля Script , в которых я создал новую переменную my_productName и присвоил значения в соответствии с условием, которое вы упомянули в запросе агрегации Монго.

Обратите внимание, что я предполагаю, что поля имеют тип keyword, иначе невозможно использовать text datatype.Не стесняйтесь изменить условие в следующем запросе как самоопределяемое.

Также я предполагаю, что все ваши документы будут иметь одно из значений, указанных в том же документе в вашем вопросе.

Запрос запроса:

POST <your_index_name>/_search
{
    "query" : {
        "match_all": {}
    },
    "script_fields" : {
        "my_productName" : {
            "script" : {
                "lang": "painless",
                "source": """
                if(doc['ProductName.CHINA.zh'].value!=null){
                  return doc['ProductName.CHINA.zh'].value;
                }else if(doc['ProductName.CHINA.en'].value!=null){
                  return doc['ProductName.CHINA.en'].value;
                }else if(doc['ProductName.WORLDWIDE.zh'].value!=null){
                  return doc['ProductName.WORLDWIDE.zh'].value;
                }else {
                  return doc['ProductName.WORLDWIDE.ch'].value;
                }

                """
            }
        }
    }
}

Ответ на запрос:

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "<your_index_name>",
        "_type" : "<your_type_name>",
        "_id" : "1",
        "_score" : 1.0,
        "fields" : {
          "my_productName" : [
            "产品 1"
          ]
        }
      }
    ]
  }
}

Еще одна вещь: если вы хотите, чтобы появлялись другие поля, вы можете добавить "_source": {"fieldname1", "fieldname2} поверхthe "query".

Надеюсь, что это поможет, и если это произойдет, не стесняйтесь поднять голос и / или принять ответ:)

Дайте мне знать, если у вас есть какие-либо вопросы.

...