결국 무엇이든 해내는 사람

ElasticSearch - Relevancy ( 정확도 ) [ 예제, 설명 ] 본문

두서없는 공부 노트/ElasticSearch

ElasticSearch - Relevancy ( 정확도 ) [ 예제, 설명 ]

kkm8257 2021. 12. 13. 17:15
반응형

 

-- 샘플 bulk
POST my_index/_bulk
{"index":{"_id":1}}
{"message":"The quick brown fox"}
{"index":{"_id":2}}
{"message":"The quick brown fox jumps over the lazy dog"}
{"index":{"_id":3}}
{"message":"The quick brown fox jumps over the quick dog"}
{"index":{"_id":4}}
{"message":"Brown fox brown dog"}
{"index":{"_id":5}}
{"message":"Lazy jumping dog"}


-- RDBMS 에서는 결과만 가져올 뿐 얼마나 정확한지에 대한 판단은 불가
-- ES 와 같은 풀텍스트 검색엔진은 결과가 검색 조건과 얼마나 정확하게 일치하는지를 계산하는 알고리즘을 가지고있어서
-- 사용자가 가장 원하는 결과를 먼저 보여 줄 수 있음
-- 이를 Relevancy라고한다. ( 연관성, 관련성으로 번역 되지만 해당 게시글에서는 정확도라고 표현 )

-- 검색을 할때 찾고자 하는 정확한 결과만 보여주고, 상관없는 결과는 보여주지 않는 것이 좋음
-- 실제 검색엔진에서는 어떤것이 사용자가 입력한 검색어와 가장 연관성이 있는지를 계산하여 정확도가 가장 높은 결과들 부터 보여준다.




-- score 점수
-- es의 검색 결과에는 스코어점수가 표시된다.
-- 이 점수는 검색된 결과가 얼마나 검색 조건과 일치하는지를 나타내며 점수가 높은 순으로 결과를 보여준다.

-- match 쿼리를 실행했을때, _score항목에 스코어 점수가 표시되고 이 점수가 높은 결과부터 나타난다.
-- max_score 는 이 전체 결과중에 가장 높은 점수를 표시
-- es는 이 점수를 계산하기 위해 BM25라는 알고리즘 사용
-- BM은 Best Matching 을 뜻함
GET my_index/_search
{
  "query": {
    "match": {
      "message": "quick dog"
    }
  }
}


-- TF ( Term Frequency )
-- 특정단어가 5번 들어있는 페이지보다는 10번 들어있는 페이지가 내가 원하는 페이지일 확률이 높을 것
-- 도큐먼트 내에서 검색된 텀이 더 많을 수록 점수가 높아지는 것을 Term Frequency라고함
-- 포함하고 있는 Term 이 증가할 수록 TF값도 증가, BM25알고리즘에서는 최대 25까지 증가하고 25부터는 TF의 점수 변화가 없음


-- IDF ( Inverse Document Frequency )
-- A와 B라는 단어를 검색했을 때 , 검색 결과 중에 A가 포함된 결과는 10개 - B가 포함된 결과는 100개 라면 , A가 B보다 검색에
-- 더 중요한 텀일 가능성이 높다. 검색한 텀을 포함하고 있는 도큐먼트 개수가 많을 수록 , 해당 텀 자신의 점수가 감소하는 것을
-- Document Frequency 라고 한다.
-- 전체 인덱스에 포함된 텀이 증가 할수록 IDF는 감소한다. 그래서 Inverse


-- Field Length
-- 도큐먼트에서 필드의 길이가 큰 필드보다는 짧은 필드에 있는 텀의 비중이 클 것이다.
-- 검색하려는 단어가 [ 제목 필드]와 [ 내용 필드]에 모두 있는 경우, 텍스트 길이가 긴 [ 내용 필드 ] 보다는
-- 텍스트 길이가 짧은 [ 제목 필드 ]에 검색어를 포함하고 있는 블로그 포스트가 더 점수가 높게 나타난다

GET my_index/_search
{
  "query": {
    "match": {
      "message": "lazy"
    }
  }
}
반응형
Comments