[elasticsearch] more like this 쿼리 정리

HI·2024년 10월 24일
0

elasticsearch Query DSL

목록 보기
1/5

More like this query

  • 입력된 세트와 유사한(like) 문서를 찾는다.
  • 입력된 문서의 대표 용어 세트를 선택하고 이를 사용해서 쿼리를 구성해 결과를 반환한다.
  • 사용자는 입력되는 문서와 텀들이 어떻게 선택될지, 쿼리를 형성할지 옵션을 통해 조정할 수 있다.

동작 방식

  • 일반적으로 field의 필드와 동일한 analyzer를 사용하여 입력된 문서에서 텍스트를 추출한다.
    그리고 tf-idf가 가장 높은 상위 K개의 텀을 선택하여 분리형 쿼리를 생성한다.
    !! 검색되는 fields의 필드는 text,keyword 타입이여야 함.
  • 예시
    GET index/_search
    {
     "track_total_hits": true,
     "query": {
     "more_like_this": {
     "fields": ["description"],
     "like": ["retractable start three"],
     "min_term_freq": 1,
     "max_query_terms": 25
     }
     },
     "_source": [
     "description"
     ]
    }
    1. like에 입력된 텍스트를 analyzer 분석
      (fields의 첫 필드인 descriptionanalyzer 사용.)
    2. 분석 결과 "retractable start three" -> [retractable retract start three] 를 가지게 된다.
    3. 분석 결과들 중 tf-idf와 지정한 옵션에 따라 검색할 상위 K개 term을 선택해(retractable retract..) 분리형 쿼리를 생성하고 검색한다.

옵션

1) 검색키워드와 관련된 옵션

1. like

  • 필수 값, 텍스트/색인 도큐먼트 입력 가능. 입력된 문자와 유사한 도큐먼트를 찾는다.

2. unlike

  • 검색되지 않을 문자

3. fields

  • 검색할 필드명(복수 가능)

2) term 선택과 관련

1. min_term_freq

  • 최소 용어 빈도 설정. 만족하지 않으면 해당 텀은 무시함.
    예시. 
       "like" : "Retract Retract safety syringe with a soft piston", 
       "min_term_freq" : 2 
       2번 나오는 텀들을(Retract) term으로 선택된다.   

2. max_query_terms

  • 검색에 선택될 최대 쿼리 텀 수, 값이 클수록 정확도는 향상, 속도는 저하됨.

3. min_word_length

  • n 미만 길이의 단어는 무시

4. max_word_length

  • n 을 초과하는 길이의 단어는 무시

5. stop_words

  • 불용어 배열. 배열의 단어들은 무시됨.

6. analyzer

  • like에 입력되는 텍스트를 어떤 analyzer 로 분석할지 지정
    (지정하지 않은 경우 fields의 첫 필드의 analyzer를 사용하게 됨)

7. include

  • 인풋 도큐먼트가 결과에 포함될지 안될지 결정함. (도큐먼트 검색시)
    false: 포함되지 않음. true: 포함됨. (default는 false)
    예시. 
    GET index/_search
    {
    	"query": {
    	"bool": {
    	"must": [
    	{
    	"more_like_this": {
    	"fields": ["description"],
    	"like": [
    	{
    		"_index": "index",
    		"_id": "123456789"
    	}
    	],
    	"min_term_freq": 1,
    	"max_query_terms": 3,
    	"include":true
    	}}]}},
    	"_source": [
    	"description"
    	]
    } > 여기선 index의 123456789값은 검색되지 않는다.

    



profile
https://github.com/gaeunban

0개의 댓글