서브쿼리같은 elastice query 구문 만들기

안녕하세요 document id값으로 해당 document의 embedVector 필드 (type은 dense_vector)의 값을 알아내고 알아낸 embedVector 필드 값으로 script_score 사용해서 index에 존재하는 모든 document의 embedVector 필드와 cosineSimilarity를 계산하고 싶은데 이런 과정을 하나의 쿼리로 작성할 수 있을까요?

코드 1번

GET doc-index-1/_search
    {
        "query" : {
            "match": {"_id": "20170802174341ddb44f23e95a9b55d392a2a7be8c3672"}
        },
        "_source": {"includes": ["embedVector"]}
    }

코드 2번

GET doc-index-1/_search
{
  "query": {
    "script_score": {
      "query": {
        "bool": {
          "filter": [
            {
              "exists": {
                "field": "embedVector"
              }
            }
          ]
        }
      },
      "script": {
                  "source": "cosineSimilarity(params.embedVector,'embedVector') + 1.0",
        "params": {
          "embedVector": [-1, -0.03917490318417549, 0.1107381135225296]
            }
          }
        }
      },
      "_source": {"includes": ["_id", "_score"]},
      "size": 5
    }

정리하자면 코드 1번과 코드 2번을 하나의 쿼리문으로 작성하고 싶습니다!
( 코드 2번에 params.embedVector에 바로 코드 1번 query 결과인 [_source][embedVector] 입력 )

감사합니다.

아래 API로 doc-index-1의 전체 매핑 정보를 알 수 있을까요?

GET doc-index-1/_mapping

그리고 샘플 document를 주시면 이해하는데 도움이 되겠습니다.

GET doc-index-1/_mapping

{
  "doc-index-1" : {
    "mappings" : {
      "properties" : {
        "contents" : {
          "type" : "text",
          "fields" : {
            "ch" : {
              "type" : "text",
              "analyzer" : "smartcn"
            },
            "en" : {
              "type" : "text",
              "analyzer" : "english"
            },
            "jp" : {
              "type" : "text",
              "analyzer" : "japan"
            },
            "kr" : {
              "type" : "text",
              "analyzer" : "korea"
            }
          }
        },
        "createAccountId" : {
          "type" : "keyword"
        },
        "embedVector" : {
          "type" : "dense_vector",
        },
        "indexDate" : {
          "type" : "date",
          "format" : "yyyy-MM-dd'T'HH:mm:ssZ||yyyyMMdd'T'HHmmssZ||epoch_millis"
        }
      }
    }
  }
}

sample document

{
  "_index": "doc-index-1",
  "_type": "_doc",
  "_id": "20210715172324512840c10781fa80663b6659845d7275",
  "_version": 7,
  "_score": null,
  "_source": {
    "createAccountId": "kimfdsfssb",
    "embedVector": [
      0.02534344792366028,
      -0.03346047177910805,
      0.03037850186228752
    ],
    "contents": "안\n\n관리 용이\n성능 관련 경고 알림\n성능 현황 및 로그 모니터링\n백업 현황 모니터링\n\n\n백업 스케줄\n다양한 스케줄 유형 제공\n( 매 시/일/주/월 )\n\n10\n매시, 매일, 매주, 매월 백업 스케쥴을 지정하여 고객사에 적합한 일정으로 백업 기능을 제공\n원본 폴더 구조 그대로 스냅샷을 남겨 전체적인 폴더 구조 유지\n초기 풀 백업 후 이후 용량은 증분 백업 형태로 진행하여 효율적인 용량 관리\n\n데이터 백업 방안\n랜섬웨어와 같은 파일 손상 시 감염 파일 삭제 후 스냅샷 구조의 백업 폴더 트리 그대로 복사하여 이전 파일로 복구\n원하는 날짜 그대로 조회하여 파일 복원이 가능\n\n데이터 복구 방안\n\n\n\n\n\n\n\n\n\n10\n\n",
    "indexDate": "2021-07-15T15:38:05+0000"
  }
}

감사합니다!

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.