<<해당 인덱스의 템플릿 조정>>

  • settings 
"settings" : {
      "index" : {
        "analysis" : {
          "analyzer" : {
            "korean" : {
              "type" : "custom",
              "tokenizer" : "seunjeon_default_tokenizer"
            }
          },
          "tokenizer" : {
            "seunjeon_default_tokenizer" : {
              "type" : "seunjeon_tokenizer",
              "index_eojeol" : "false",
              "decompound" : "false"
            }
          }
        }
      }
    }

 

  • mapping 

분석하고 싶은 필드값에 추가

 "contents" : {
          "type" : "text",
          "analyzer" : "korean"
        }

 

 

<<결과>>

다음과 같이 "강아지"로 리퀘스트를 보내 줬을 때, "강아지가 귀여워" 가 검색된닷

GET sample4/_search
{
  "query": {
    "match": {
      "contents": "강아지"
    }
  }
}
          "contents" : "강아지는 귀여워",
          "mdate" : "2020-02-03T15:00:06.000Z",
          "blocked_type" : 0,
          "category" : null,
          "view_yn" : 0,
          "contents_type" : 3

 

<<참고>>

1. analyzer와 search analyzer는 서로 다른 분석기로 설정 가능

2. "match" 쿼리: inverted index에 저장되는 토큰에서 "분석"하여 찾아줌 - "강아지"로 "강아지는 귀여워" 못찾는다

3. "term" 쿼리: inverted index에 저장되어 있는 토큰에서 찾아줌

## logstash의 config 설정 파일

input { 
      jdbc{ 
           jdbc_driver_library => "/usr/share/java/mysql-connector-java-5.1.47/mysql-connector-java-5.1.47.jar" 
   
          jdbc_driver_class => "com.mysql.jdbc.Driver" 
   
          jdbc_connection_string => ###
   
          jdbc_user =>"admin" 
   
          jdbc_password => ###
   
          jdbc_paging_enabled => true 
           tracking_column => "contents_code" 
           use_column_value => true 
           tracking_column_type => "numeric" 
           schedule => "*/1 * * * *"  # 1분마다
   
   
          statement => "SELECT * FROM tbl_contents_master 
          WHERE mdate > (SELECT DATE_SUB(NOW(), INTERVAL 60 MINUTE))" 
      } 
  } 
  filter{ 
   
   fingerprint { 
          key => "1234ABCD" 
          method => "SHA256" 
          source => ["contents_code"] 
          target => "[@metadata][generated_id]" 
          concatenate_sources => true 
      } 
  } 
  output { 
      amazon_es { 
           hosts => ###
           region => "ap-northeast-2" 
           aws_access_key_id => ###
           aws_secret_access_key => ###
          index =>"new" 
          document_id => "%{[@metadata][generated_id]}" 
          doc_as_upsert => true 
          action => "update" 
   } 
   
      stdout{ 
          codec => rubydebug{} 
      } 
  }

 

1. logstash 1분마다 갱신되도록 : schedule => "*/1 * * * *"  # 1분마다

2. 현재시간과 비교해서 1분 전 안에 들어온 데이터를 전부 삽입

: "SELECT * FROM tbl_contents_master WHERE mdate > (SELECT DATE_SUB(NOW(), INTERVAL 60 MINUTE))" 

3. contents_code 를 기준으로 같은 코드면 덮어쓰게 함 : source => ["contents_code"] 

4. 새로운 데이터가 삽입되면 반영 : doc_as_upsert => true 

5. <update!!> output에 document_type => "_doc"

+ Recent posts