다음에 대한 쿼리 본문 구성 Elasticsearch

여러 검색 기준을 결합해야 하는 복잡한 쿼리에는 쿼리 본문을 사용합니다. 쿼리 절은 문서가 검색과 일치하는지 여부를 결정하여 보다 정확한 결과를 반환하는 데 도움이 됩니다.

Elasticsearch 와의 통합은 키워드 검색을 사용하지만 상담원에게 고급 Elasticsearch 설정으로 쿼리 본문을 구성하여 다음과 같은 고급 검색 기술을 사용할 수 있습니다:

  • ELSER를 사용한 시맨틱 검색.
  • k-최근 이웃 ( kNN ) 밀도 벡터 검색.
  • 중첩된 문서를 검색하는 중첩 쿼리.
  • 하이브리드 검색.
  • 시맨틱 텍스트 필드에서 검색합니다.

ELSER를 사용한 시맨틱 검색

ELSER와 함께 시맨틱 검색을 사용하면 사용자 쿼리의 맥락과 의도를 이해하여 검색 정확도와 관련성을 높일 수 있습니다. 자세한 내용은 ELSER를 사용한 외부 페이지로 리디렉션하는 아이콘입니다. 시맨틱 검색 문서 에서 Elasticsearch 확인하십시오.

다음 코드 스니펫은 ELSER를 사용한 시맨틱 검색의 예를 보여줍니다. 이 예제는 다른 쿼리의 부울 조합과 일치하는 문서를 매칭하기 위해 부울 외부 페이지로 리디렉션하는 아이콘입니다. 쿼리를 사용합니다.

{
  "query": {
    "bool": {
      "should": [
        {
          "text_expansion": {
            "ml.tokens": {
              "model_id": ".elser_model_2_linux-x86_64",
              "model_text": "$QUERY"
            }
          }
        }
      ],
      "filter": "$FILTER"
    }
  }
}

여기서,

  • ml.tokens

    ELSER 토큰을 저장하는 필드를 말합니다. 인덱스에서 다른 필드를 사용하는 경우 업데이트해야 할 수 있습니다. ELSER 토큰을 사용할 수 없는 경우 원시 텍스트가 포함된 필드를 사용할 수도 있지만 검색 품질이 저하될 수 있습니다.

  • .elser_model_2_linux-x86-64

    ELSER v2 의 최적화된 버전에 대한 모델 ID이며, Elasticsearch 배포에서 사용할 수 있는 경우 사용합니다. 그렇지 않으면 일반 ELSER v2 모델의 경우 .elser_model_2 , ELSER .elser_model_1 의 경우 v1 을 사용하세요.

  • $QUERY

    사용자 쿼리에 액세스하기 위한 변수입니다. 사용자 쿼리가 쿼리 본문으로 전달되는지 확인할 수 있습니다.

  • $FILTER

    이는 고급 설정에서 구성한 사용자 정의 필터에 접근하기 위한 Elasticsearch 변수입니다. 쿼리 본문에서 사용자 지정 필터가 사용되도록 할 수 있습니다.

중첩 쿼리를 사용하여 ELSER로 중첩된 문서 검색하기

인덱스에 중첩된 문서가 포함된 경우, Elasticsearch 인덱스 내 중첩된 필드를 검색하기 위해 쿼리를 다시 중첩된 쿼리 외부 페이지로 리디렉션하는 아이콘입니다. 감쌉니다. 일치하는 문서가 발견되면 쿼리는 일치하는 중첩 문서와 함께 루트 상위 문서를 반환합니다. 검색 결과에 필터를 적용할 때 상위 문서 또는 중첩된 문서 중 하나를 선택하여 필터링할 수 있습니다.

외부 문서 쿼리하기

다음 코드 스니펫은 Elasticsearch 인덱스 내의 외부 문서를 쿼리하는 예시를 보여 줍니다.
이 예에서 외부 문서는 passages 중첩 문서가 포함된 기본 문서입니다. nested 쿼리는 passages 중첩 문서 내에서 검색합니다.
중첩된 문서 내에서 일치하는 문서가 발견되면 쿼리는 일치하는 중첩된 문서와 함께 외부 문서를 반환합니다.

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "passages",
            "query": {
              "text_expansion": {
                "passages.sparse.tokens": {
                  "model_id": ".elser_model_2_linux-x86_64",
                  "model_text": "$QUERY"
                  }
              }
            },
            "inner_hits": {"_source": {"excludes": ["passages.sparse"]}}
          }
        }
      ],
      "filter": "$FILTER"
    }
  },
  "_source": false
}

내부 문서 쿼리하기

다음 코드 스니펫은 중첩된 문서 내의 내부 문서를 쿼리하는 예제입니다.
이 예제에서는 중첩된 문서 내에서 확장된 텍스트를 검색하고 필터를 적용한 다음 소스에서 특정 필드를 제외하고 일치하는 중첩된 문서가 있는 상위 문서를 반환합니다.

{
  "query": {
    "nested": {
      "path": "passages",
      "query": {
        "bool": {
          "should": [
            {
              "text_expansion": {
                "passages.sparse.tokens": {
                  "model_id": ".elser_model_2_linux-x86_64",
                  "model_text": "$QUERY"
                }
              }
            }
          ],
          "filter": "$FILTER"
        }
      },
      "inner_hits": {"_source": {"excludes": ["passages.sparse"]}}
    }
  },
  "_source": false
}

여기서,

  • passages

    상위 문서 내에 내부 문서를 저장하는 중첩된 필드입니다. 인덱스에 다른 중첩된 필드를 사용하는 경우 업데이트해야 할 수도 있습니다.

  • passages.sparse.tokens

    내부 문서의 ELSER 토큰 또는 원시 텍스트를 저장하는 필드를 말합니다. 인덱스에 다른 중첩된 필드를 사용하는 경우 업데이트해야 할 수도 있습니다. ELSER 토큰을 사용할 수 없는 경우 원시 텍스트가 포함된 필드를 사용할 수도 있지만 검색 품질이 저하될 수 있습니다.

  • "inner_hits": {"_source": {"excludes": ["passages.sparse"]}}

    검색 결과의 내부 문서에서 ELSER 토큰을 제외합니다.

  • "_source": false

    검색 결과의 내부 문서만 사용되므로 검색 결과의 최상위 필드는 모두 제외됩니다.

  • $QUERY

    사용자 쿼리에 액세스하기 위한 변수입니다. 사용자 쿼리가 쿼리 본문으로 전달되는지 확인할 수 있습니다.

  • $FILTER

    이는 고급 설정에서 구성한 사용자 정의 필터에 접근하기 위한 Elasticsearch 변수입니다. 쿼리 본문에서 사용자 지정 필터가 사용되도록 할 수 있습니다.
    외부 문서에 적용된 경우, 필터에서 사용할 수 있는 필드는 외부 필드만 해당됩니다. 내부 문서에 적용하면 내부 필드만 필터에 사용할 수 있습니다.

중첩 쿼리를 사용하여 의미론적 텍스트 필드에서 검색하기

시맨틱 텍스트 필드에서 중첩된 문서를 쿼리하려면 다음 구조를 사용하세요. 이 구조는 Elasticsearch 통합에서 검색이 제대로 작동하도록 보장합니다.

{
  "query": {
    "nested": {
      "path": "semtext.inference.chunks",
      "query": {
        "sparse_vector": {
          "field": "semtext.inference.chunks.embeddings",
          "inference_id": ".elser_model_2_linux-x86_64",
          "query": "$QUERY"
        }
      },
      "inner_hits": {"_source": {"excludes": ["semtext.inference.chunks.embeddings"]}}
    }
  },
  "_source": false
}

여기서,

  • semtext

    시맨틱 필드의 이름입니다. 시맨틱 필드의 이름이 다른 경우 이를 업데이트해야 할 수도 있습니다. 자세한 내용은 서의 Elasticsearch 시맨틱 텍스트 외부 페이지로 리디렉션하는 아이콘입니다. 필드 유형을 참조하십시오.

  • semtext.inference.chunks

    청크 텍스트와 임베딩을 저장하는 필드를 말합니다.

  • sparse_vector

    쿼리 유형(이 경우 sparse_vector 쿼리)을 지정합니다. text_expansion 쿼리와 비슷하지만 더 새로운 유형의 쿼리입니다.

  • semtext.inference.chunks.embeddings

    청크된 텍스트의 임베딩을 저장하는 필드를 나타냅니다.