반응형

핵심 정리

Solr payload는 단순 키워드 매칭을 넘어 문서 안의 특정 term 위치에 추가 정보를 붙여 scoring이나 정렬에 활용하는 고급 색인 방식입니다. 전역 키워드 가중치가 아니라 문서 내 term 단위 정보라는 점을 구분해야 합니다.

  • Payload는 색인 시점에 term과 함께 저장되는 부가 정보입니다.
  • 검색어를 포인터처럼 사용해 문서 안의 특정 term 관련 값을 참조할 수 있습니다.
  • Payload는 어떤 문서가 매칭되는지를 완전히 바꾸기보다 점수와 순서에 영향을 주는 용도로 쓰입니다.
  • 대부분 정적 정보에 어울리며 실시간으로 자주 바뀌는 값에는 다른 설계를 고려해야 합니다.
  • 기본 facet이나 filter query보다 훨씬 특수한 검색 랭킹 요구가 있을 때 검토하는 기능입니다.

Payload를 볼 때는 검색 결과 필터링 기능이 아니라 term 단위 scoring 보정 기능으로 이해하는 편이 안전합니다. 단순 검색 집계가 목적이면 facet을 먼저 보고, 문서 안 term별 가중치가 필요할 때 payload를 검토하면 됩니다.

이어서 볼 글

 

여기 참조

단순 인덱싱을 넘어서는 고급 인덱싱의 한 형태로, 검색어를 통한 indirect 인덱싱형태로 다른 정보들을 가져올때 사용한다.

즉, 검색어를 일종의 포인터 삼아서 다른곳에서 값들을 가져오는것.

주요포인트

  • 키워드에 대해서 문서범위를 넘어서는 글로벌 범위에서 가중치를 부여하는게 아님(문서 내 가중치)
  • 반환되는 문서의 개수나 종류는 키워드 매칭에 기반하고, payload는 순서나 가중치에만 영향을 줄 수 있음
  • 주로 색인시 할당되며, 정적인 정보를 처리한다. 실시간 처리에는 다른 방식이 권장된다.

예시: 뉴스검색

1. Payload를 사용하지 않는 경우 (단순 인덱싱)
검색 쿼리: 사용자가 "블록체인"이라는 키워드로 뉴스 기사를 검색합니다.
인덱싱: 모든 기사에서 "블록체인"이라는 키워드를 포함하는 부분을 색인합니다. 색인은 키워드의 존재 여부에 초점을 맞춥니다.
검색 결과: "블록체인" 키워드를 포함하는 모든 기사가 결과로 반환됩니다. 결과는 키워드의 빈도수나 기사의 일반적인 인기도에 따라 정렬됩니다.
결과의 특징: 반환된 기사들은 "블록체인"이라는 키워드를 포함한다는 공통점이 있지만, 키워드의 위치나 문서 내의 중요도에 따른 차별화된 가중치는 고려되지 않습니다.

2. Payload를 사용하는 경우 (고급 인덱싱)
검색 쿼리: 동일하게 사용자가 "블록체인"이라는 키워드로 뉴스 기사를 검색합니다.
인덱싱과 Payload: 기사 내에서 "블록체인" 키워드가 나타나는 위치(예: 제목, 첫 문단, 본문)에 따라 다른 payload 값을 부여합니다. 제목에 나타날 경우 높은 가중치를, 본문에만 나타날 경우 낮은 가중치를 부여합니다.
검색 결과와 Payload 활용: 검색 결과는 "블록체인" 키워드를 포함하지만, payload 값을 기반으로 정렬됩니다. 이를 통해 제목에 "블록체인"을 포함한 기사가 본문에만 해당 키워드가 있는 기사보다 더 높은 순위에 배치됩니다.
결과의 특징: 검색 결과는 단순히 키워드의 존재 여부를 넘어서, 키워드의 위치와 문서 내 중요도에 따라 세밀하게 조정됩니다. 사용자는 주제에 대해 더 중요하고 관련성 높은 기사를 우선적으로 볼 수 있습니다.

결론
Payload를 사용하지 않는 경우, 검색 결과는 단순히 키워드의 존재와 빈도에 의존합니다. 반면, payload를 사용하는 경우,

검색 결과의 순위나 가중치가 키워드의 문서 내 위치와 맥락에 따라 조정되어 사용자에게 더 관련성 높은 정보를 제공합니다.



반응형
반응형

Solr Facet은 검색 결과에 필드별 개수나 범위별 집계를 함께 붙여 사용자가 결과를 좁혀 볼 수 있게 하는 기능입니다.

이 글은 장르처럼 값이 나뉘는 필드에는 facet.field를, 가격처럼 구간이 필요한 숫자 필드에는 facet.range를 사용하는 예제를 정리합니다.

 

핵심 정리

Facet은 검색 결과 자체를 바꾸는 기능이라기보다, 검색 결과에 대한 집계 정보를 함께 제공하는 기능입니다. 예를 들어 과학 도서 검색 결과에서 장르별 개수를 보여주면 사용자는 천문학, 생물학, 물리학처럼 원하는 범주로 좁혀 볼 수 있습니다. 가격처럼 숫자 범위를 나누고 싶을 때는 시작값, 끝값, 간격을 지정하는 range facet을 사용할 수 있습니다.

  • facet=true는 Solr 검색에서 facet 기능을 켭니다.
  • facet.field는 특정 필드의 값별 개수를 집계합니다.
  • facet.range는 숫자나 날짜처럼 구간으로 나눌 수 있는 필드에 씁니다.
  • facet.range.start와 facet.range.end는 집계할 범위의 시작과 끝입니다.
  • facet.range.gap은 각 구간의 간격을 정합니다.
  • facet_counts는 검색 결과 문서와 별도로 집계 정보가 들어오는 영역입니다.

원문은 예제 JSON이 길어 처음 보는 사람이 facet_counts가 무엇인지 놓치기 쉽습니다. 이번 보강은 field facet과 range facet의 차이를 먼저 설명해 예제를 읽는 기준을 세웠습니다.

이어서 볼 글

  • Solr - payload - facet이 검색 결과 집계라면 payload는 term 단위 scoring 보정으로 이어지는 Solr 고급 기능이다.

 

영단어 Facet은 보석세공후 한 단면을 의미. Solr에서는 여기서 하나의 측면이라는 의미를 따 왔다.

페이싯 기능은 통계적 정보를 검색결과에 추가한다고 이야기할 수 있으며, 사용자가 대량의 데이터 속에서 필요한 정보를 빠르고 정확하게 찾을 수 있도록 도와주는 강력한 도구로 활용될수 있다.

솔라검색 예시

검색: http://localhost:8983/solr/컬렉션명/select?q=과학&facet=true&facet.field=장르

출력:

{
  "responseHeader":{
    "status":0,
    "QTime":10
  },
  "response":{"numFound":123,"start":0,"docs":[
      {
        "제목":"천체물리학 입문",
        "저자":"스티븐 호킹",
        "장르":"천문학",
        "가격":20000
        // 기타 도서 정보
      },
      // 검색된 다른 책들의 정보
    ]
  },
  "facet_counts":{
    "facet_fields":{
      "장르":[
        "천문학", 34,
        "생물학", 29,
        "물리학", 20,
        "지질학", 10,
        // 기타 장르 및 해당 장르의 책 개수
      ]
    }
  }
}

위에서 facet_counts부분이 facet과 관련되어 추가된 부분이다.

가격관련 facet예시

검색: http://localhost:8983/solr/컬렉션명/select?q=노트북&facet=true&facet.range=가격&facet.range.start=0&facet.range.end=2000000&facet.range.gap=500000

q=노트북: "노트북"이라는 키워드로 검색합니다.
facet=true: 페이싯 기능을 활성화합니다.
facet.range=가격: "가격" 필드를 기준으로 범위 페이싯을 적용합니다.
facet.range.start=0: 가격 범위의 시작을 0원으로 설정합니다.
facet.range.end=2000000: 가격 범위의 끝을 2,000,000원으로 설정합니다.
facet.range.gap=500000: 가격 범위의 간격을 500,000원으로 설정합니다.

출력:

{
  "responseHeader":{
    "status":0,
    "QTime":15
  },
  "response":{"numFound":250,"start":0,"docs":[
      {
        "제품명":"모델 A 노트북",
        "브랜드":"브랜드X",
        "가격":1500000
        // 기타 제품 정보
      },
      // 검색된 다른 노트북들의 정보
    ]
  },
  "facet_counts":{
    "facet_ranges":{
      "가격":{
        "counts":[
          "0-500000", 25,
          "500000-1000000", 75,
          "1000000-1500000", 100,
          "1500000-2000000", 50
        ]
      }
    }
  }
}
반응형

'Programming > Data Engineering' 카테고리의 다른 글

Solr Payload 개념: term 단위 scoring 가중치  (0) 2024.01.16

+ Recent posts