본문 바로가기

AI

ElasticSearch의 다양한 검색방법들

1. KNN 알고리즘을 이용한 벡터 검색 

  • knn을 이용하여 벡터 유사도를 계산하여 가장 유사한 문서들을 반환하는 방식이다.
  • 예시:
    es.search(index="test", knn=knn)

2. 역색인을 이용한 텍스트 검색 

  • 텍스트 기반의 검색어와 문서 내용을 비교하여 일치하는 문서를 반환하는 방식이다. 부분적 일치도 가능하다.
  • 예시:
    es.search(index="test", query=query, size=size, sort="_score")

3. 조건 없이 모든 문서 반환 

  • 모든 문서를 반환하는 방법으로, 쿼리 조건을 주지 않고 모든 문서에 대해 일괄 검색을 수행한다.
  • 예시:
    es.search(index="test", size=10, query={"match_all": {}})

4. 임베딩 기반 유사도 검색 (script_score)

  • script_score를 사용하면 벡터 간의 유사도를 계산할 수 있다. 이 방식은 벡터 검색뿐만 아니라 사용자 정의 스코어링에도 유용하다.
  • script_score는 벡터 간의 유사도를 계산하는 스크립트를 실행하여 검색 결과를 정렬할 수 있다.
  • 예시:
    query_embedding = get_embedding([query_str])[0] script_query = { "script_score": { "query": {"match_all": {}}, "script": { "source": "cosineSimilarity(params.query_vector, 'embeddings') + 1.0", "params": {"query_vector": query_embedding.tolist()} } } } es.search(index="test", query=script_query, size=size)

5. Bool Query를 이용한 복합 검색

  • 여러 개의 조건을 조합하여 복합적으로 문서를 검색할 수 있다. and, or 같은 조건을 함께 사용하여 필터링 가능하다.
  • 예시:
    query = { "bool": { "must": [ {"match": {"content": "인공지능"}}, {"range": {"date": {"gte": "2020-01-01"}}} ] } } es.search(index="test", query=query)

6. Range Query (범위 검색)

  • 숫자나 날짜 등의 범위를 기준으로 문서를 검색할 수 있다.
  • 예시:
    query = { "range": { "date": { "gte": "2020-01-01", "lte": "2023-01-01" } } } es.search(index="test", query=query)

7. Term Query (정확한 값 검색)

  • 특정 필드가 정확하게 일치하는 문서를 찾을 때 사용된다. keyword 필드에서 주로 사용된다.
  • 예시:
    query = { "term": { "status": "active" } } es.search(index="test", query=query)

8. Wildcard Query (와일드카드 검색)

  • 텍스트 검색 시 와일드카드(*, ?)를 사용하여 유연한 패턴 매칭을 할 수 있다.
  • 예시:
    query = { "wildcard": { "content": { "value": "인공지능*" } } } es.search(index="test", query=query)

9. Fuzzy Query (오타 교정 검색)

  • 오타나 철자가 틀린 검색어도 일정 범위 내에서 유사한 문서를 반환하는 방법이다.
  • 예시:
    query = { "fuzzy": { "content": { "value": "인공지능", "fuzziness": "AUTO" } } } es.search(index="test", query=query)

10. Aggregation Query (집계 쿼리)

  • 검색과 함께 특정 필드의 집계를 수행하는 방식으로, 예를 들어, 문서의 카테고리별 개수를 계산하거나, 값의 평균 등을 구할 수 있다.
  • 예시:
    query = { "aggs": { "average_price": { "avg": { "field": "price" } } } } es.search(index="test", query=query)

요약:

Elasticsearch에서는 다양한 검색 방법이 있으며, 특히 벡터 검색(KNN, script_score)과 텍스트 검색(Match, Term, Range) 등을 결합해 복합적인 검색 시스템을 만들 수 있다.

'AI' 카테고리의 다른 글

Faiss와 Elasticsearch 비교  (0) 2024.10.08
ElasticSearch의 검색 결과  (0) 2024.10.07
모델 = 가중치?  (1) 2024.09.25
Konlpy 오류 수정  (0) 2024.09.02
자연어처리의 데이터 증강기법  (0) 2024.08.28