쿼리를 기반으로 ElasticSearch의 배열에서 객체 제거

VPR

Elastic doc의 중첩 된 구조에서 객체를 제거하고 싶습니다. 이것은 내 Elastic doc이 'submissions'인덱스에서 어떻게 보이는지입니다. 조건에 따라 모든 문서에서 개체를 제거하고 싶습니다.

{
  "took": 21,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 11,
    "max_score": 1,
    "hits": [
      {
        "_index": "submissions",
        "_type": "_doc",
        "_id": "15_12069",
        "_score": 1,
        "_source": {
          "id": "15_12069",
          "account_id": 2,
          "survey_id": 15,
          "submission_id": 12069,
          "answers": [
            {
              "question_id": 142,     //
              "skipped": false,       //<------ remove object with question_id: 142
              "answer_txt": "product" //
            },
            {
              "question_id": 153,
              "skipped": false,
              "answer_txt": "happy"
            }
          ]
        }
      },
      {
        "_index": "submissions",
        "_type": "_doc",
        "_id": "15_12073",
        "_score": 1,
        "_source": {
          "id": "15_12073",
          "account_id": 2,
          "survey_id": 15,
          "submission_id": 12073,
          "answers": [
            {
              "question_id": 142,       //
              "skipped": false,         //<------ remove object with question_id: 142
              "answer_txt": "coherent"  //
            },
            {
              "question_id": 153,
              "skipped": false,
              "answer_txt": "cool"
            }
          ]
        }
      }
    ]
  }
}

나는 updateByQuery api (_update_by_query) 및 ctx._source.remove with query를 시도하고 싶었습니다.

{
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "must": [
              {
                "match": {
                  "account_id": 2
                }
              },
              {
                "match": {
                  "survey_id": 15
                }
              }
            ]
          }
        },
        {
          "nested": {
            "path": "answers",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "answers.question_id": 142
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

이것에 대한 통찰력이나 더 나은 접근 방식이 있습니까?

ESCoder

다음과 같은 방법으로 Update By Query API를 사용할 수 있습니다.

인덱스 데이터, 매핑 및 쿼리로 작업 예제 추가

인덱스 매핑 :

{
  "mappings": {
    "properties": {
      "answers": {
        "type": "nested"
      }
    }
  }
}

인덱스 데이터 :

    {
  "id": "15_12069",
  "account_id": 2,
  "survey_id": 15,
  "submission_id": 12069,
  "answers": [
    {
      "question_id": 142, 
      "skipped": false, 
      "answer_txt": "product" 
    },
    {
      "question_id": 153,
      "skipped": false,
      "answer_txt": "happy"
    }
  ]
}
{
      "id": "15_12073",
      "account_id": 2,
      "survey_id": 16,
      "submission_id": 12073,
      "answers": [
        {
          "question_id": 142,
          "skipped": false,
          "answer_txt": "coherent"
        },
        {
          "question_id": 153,
          "skipped": false,
          "answer_txt": "cool"
        }
      ]
    }
    

질문:

  POST /index/_update_by_query
{
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "must": [
              {
                "match": {
                  "account_id": 2
                }
              },
              {
                "match": {
                  "survey_id": 15
                }
              }
            ]
          }
        },
        {
          "nested": {
            "path": "answers",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "answers.question_id": 142
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  },
  "script": {
    "source": "ctx._source.answers.removeIf(question_id -> question_id.question_id == params.remove_id);",
    "params": {
      "remove_id": 142
    }
  }
}

위의 질의를 수행 한 후 질의의 모든 조건, 즉 "account_id": 2AND "survey_id": 15AND 를 만족 "answers.question_id": 142하는 문서는 해당 문서 객체에서 question_id: 142제거됩니다.

따라서 첫 번째 문서 (위에 인덱싱 된대로)에서 포함 된 문서 "answers.question_id": 142가 제거되고 이제 문서에 아래 데이터가 포함됩니다 (쿼리 실행 후).

{
  "_index": "64898361",
  "_type": "_doc",
  "_id": "1",
  "_version": 8,
  "_seq_no": 13,
  "_primary_term": 1,
  "found": true,
  "_source": {
    "survey_id": 15,
    "submission_id": 12069,
    "account_id": 2,
    "answers": [
      {
        "answer_txt": "happy",
        "question_id": 153,
        "skipped": false
      }
    ],
    "id": "15_12069"
  }
}

두 번째 문서는 모든 쿼리 조건을 충족하지 않으므로 변경되지 않습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

복제를 기반으로 객체에서 jquery 객체 제거

분류에서Dev

JavaScript + MariaDB : json 객체의 배열을 반환하고 응답에서`\`슬래시를 제거하는 SQL 쿼리

분류에서Dev

객체의 참조만으로 배열에서 객체 제거

분류에서Dev

키를 기반으로 JavaScript 객체 배열에서 중복 제거

분류에서Dev

다른 객체를 기반으로 배열 항목 제거

분류에서Dev

Javacript Array of Objects-중첩 된 객체를 기반으로 배열에서 중복 객체 제거

분류에서Dev

외부 객체 속성을 기반으로 객체의 배열 요소 제거

분류에서Dev

SQL 쿼리를 기반으로 배열에서 요소 제거

분류에서Dev

SQL 쿼리를 기반으로 배열에서 요소 제거

분류에서Dev

Ruby의 키를 기반으로 배열에서 해시 제거

분류에서Dev

배열 목록에서 두 개의 매개 변수를 기반으로 객체 삭제

분류에서Dev

여러 키의 중복 값을 기반으로 객체 배열에서 요소 제거

분류에서Dev

SQL 쿼리를 기반으로 다차원 배열에서 배열 제거

분류에서Dev

JavaScript는 키 값 배열을 기반으로 목록에서 객체를 제거합니다.

분류에서Dev

JavaScript는 키 값 배열을 기반으로 목록에서 객체를 제거합니다.

분류에서Dev

Underscore.js를 사용하여 속성을 기반으로 배열에서 객체 제거

분류에서Dev

API를 호출하기 전에 배열에서 객체 제거

분류에서Dev

배열의 객체에서 키를 제거하는 방법

분류에서Dev

Perl의 배열에서 객체를 제거하는 방법

분류에서Dev

onClick은 reactjs의 배열에서 객체를 제거합니까?

분류에서Dev

다른 열의 요소를 기반으로 pyspark 배열에서 요소 제거

분류에서Dev

Swift 2.0으로 Parse에서 배열에서 객체를 제거하는 방법

분류에서Dev

객체의 JS 배열을 반복하고 일치하는 객체를 반환하고 원래 배열에서 제거합니까?

분류에서Dev

배열에서 임의의 개체를 제거하고 반환

분류에서Dev

MongoDB에서 여러 기준으로 배열의 객체를 쿼리하는 방법은 무엇입니까?

분류에서Dev

객체의 속성을 기반으로 NSMutableArray에서 중복 제거

분류에서Dev

배열의 객체에서 값을 제거하면 키를 반복하는 경우에도 전체 객체가 수정됩니다.

분류에서Dev

객체의 변수를 모르면서 arraylist에서 객체 찾기 및 제거

분류에서Dev

제공된 쿼리를 기반으로 Elasticsearch 문서 향상

Related 관련 기사

  1. 1

    복제를 기반으로 객체에서 jquery 객체 제거

  2. 2

    JavaScript + MariaDB : json 객체의 배열을 반환하고 응답에서`\`슬래시를 제거하는 SQL 쿼리

  3. 3

    객체의 참조만으로 배열에서 객체 제거

  4. 4

    키를 기반으로 JavaScript 객체 배열에서 중복 제거

  5. 5

    다른 객체를 기반으로 배열 항목 제거

  6. 6

    Javacript Array of Objects-중첩 된 객체를 기반으로 배열에서 중복 객체 제거

  7. 7

    외부 객체 속성을 기반으로 객체의 배열 요소 제거

  8. 8

    SQL 쿼리를 기반으로 배열에서 요소 제거

  9. 9

    SQL 쿼리를 기반으로 배열에서 요소 제거

  10. 10

    Ruby의 키를 기반으로 배열에서 해시 제거

  11. 11

    배열 목록에서 두 개의 매개 변수를 기반으로 객체 삭제

  12. 12

    여러 키의 중복 값을 기반으로 객체 배열에서 요소 제거

  13. 13

    SQL 쿼리를 기반으로 다차원 배열에서 배열 제거

  14. 14

    JavaScript는 키 값 배열을 기반으로 목록에서 객체를 제거합니다.

  15. 15

    JavaScript는 키 값 배열을 기반으로 목록에서 객체를 제거합니다.

  16. 16

    Underscore.js를 사용하여 속성을 기반으로 배열에서 객체 제거

  17. 17

    API를 호출하기 전에 배열에서 객체 제거

  18. 18

    배열의 객체에서 키를 제거하는 방법

  19. 19

    Perl의 배열에서 객체를 제거하는 방법

  20. 20

    onClick은 reactjs의 배열에서 객체를 제거합니까?

  21. 21

    다른 열의 요소를 기반으로 pyspark 배열에서 요소 제거

  22. 22

    Swift 2.0으로 Parse에서 배열에서 객체를 제거하는 방법

  23. 23

    객체의 JS 배열을 반복하고 일치하는 객체를 반환하고 원래 배열에서 제거합니까?

  24. 24

    배열에서 임의의 개체를 제거하고 반환

  25. 25

    MongoDB에서 여러 기준으로 배열의 객체를 쿼리하는 방법은 무엇입니까?

  26. 26

    객체의 속성을 기반으로 NSMutableArray에서 중복 제거

  27. 27

    배열의 객체에서 값을 제거하면 키를 반복하는 경우에도 전체 객체가 수정됩니다.

  28. 28

    객체의 변수를 모르면서 arraylist에서 객체 찾기 및 제거

  29. 29

    제공된 쿼리를 기반으로 Elasticsearch 문서 향상

뜨겁다태그

보관