본문 바로가기

프로젝트

(77)
[ElasticSearch] 최종 인덱스, 중복 문제와 오탈자 검색의 고민 인덱스 최종 수정 기존에는 필터 유무로 인덱스를 나눴는데. 이는 매우 비효율적인 짓이었다. 그냥 커스텀 분석기를 하나 추가하고, 하나의 인덱스에 적용하면 된다. 특히 match_term 등의 토큰화 과정에서만 2글자 이상 토크나이징 분석기를 사용하면 될 것이다. 그리고 후에 설명할 로직으로 인해 ngram 분석기를 추가하였다. reindex 효율적으로 사용하기 와중에 데이터를 마이그레이션하는 과정에서 reindex가 timeout되는 것을 확인했다. 이는 큰 사이즈의 데이터일 경우 kibana에서 일정 시간 이상 할당한 경우 자체적으로 block하는 것으로 보인다. POST _reindex { "source": { "index": "scrap_wiki_limited_term_length_1109", "s..
[정리]analyzer를 사용한 수집 정보의 유사성 계산 요약 0. 수집 데이터는 기존 데이터와 완벽 매칭되는 것이 아닌 부분 데이터 검색 결과값이다. 1차 개선 : null 배제 후 유의미한 데이터 포집 2차 개선 : 유의미 데이터 중 overview - wiki_title 매칭하여 용어 변수 비교 (동음이의어, 잘못된 설명 제거로 신뢰성 향상) 3차 개선 : attraction_name - wiki_title의 매칭 값을 기존 결과(match_term에) 보정 값으로 추가 (상위 데이터셋 중 임의 데이터 200개 수기 분석 후 보정치 적용) 이를 통해 용어 일치 비율이 20% 이상 되는 값을 신뢰성 있는 데이터로 판단하여 제공하였다. 이를 도식화한다면 다음과 같다. 최초 문제 상황 현재 기본 공공데이터 API의 지명 이름(attraction_name)과, ..
ES 서버 Nginx 설정(xpack 보안 설정) 문제 보안 이슈로 계정을 추가하고, yml에 xpack을 추가한 이후, 스프링부트에서 연동이 되지 않는다. 이는 내 서버가 https가 적용되지 않았기 때문이다. 기존 springboot 연동 urls는 http로 시작했다. Nginx 설치 https://gist.github.com/woorim960/dda0bc85599f61a025bb8ac471dfaf7a [Nginx를 이용하여 https 적용하는 법 Nginx를 이용하여 https 적용하는 법. GitHub Gist: instantly share code, notes, and snippets. gist.github.com](https://gist.github.com/woorim960/dda0bc85599f61a025bb8ac471dfaf7a) con..
[Elasticsearch] 여행지 정보 키워드 추출, 집계 프로젝트 진행 중 가장 큰 고민은, 단순 match가 아닌, 어떻게 하면 정보를 정확하고 유사하게 뿌려줄까? 라는 고민이었다. attraction_name : 가장 높은 가산치를 줘야 할 것 같다. wiki_title match 점수 공공데이터의 description : 그 다음 높은 가산치 wiki의 description : 낮은 가산치 검색어가 있을 것이다. 단일 검색어든 뭐든.. 일단 content_id로 한번에 묶으려고 한다. 검색어가 '서울 남산공원' 이라면 우리의 데이터는 '서울' 과 '남산공원' 이 같은 contend_id로 묶여있기 때문. 이 content_id는 기본 베이스인 공공데이터의 id 번호이다 script를 써야 할 것 같은데, 먼저 content_id로 묶을 것이다. 여러 Do..
[ElasticSearch] MySQL Like와의 검색 속도 비교 역인덱싱 엘라스틱서치의 역인덱싱(inverted indexing)은 문서가 포함하고 있는 각 단어의 색인을 만드는 과정을 말한다. 각 단어에 대한 문서의 참조를 역순으로 저장하는데, 이렇게 하면 검색 엔진이 단어를 빠르게 찾고 해당 단어가 포함된 모든 문서를 즉각적으로 확인할 수 있다. 역인덱싱의 시간 복잡도 1. 색인 생성: 각 문서에 대해 단어를 추출하고 색인을 만드는 데 O(N * M)의 시간이 걸린다. 여기서 N은 문서의 수, M은 문서당 평균 단어 수다. 2. 검색 연산: 색인이 생성되고 나면, 특정 단어의 검색은 매우 빠르다. 색인에서 직접 해당 단어에 접근하여 연관된 문서들을 찾을 수 있으므로, 이론적으로 O(1)에 가까운 시간 복잡도를 갖는다. 하지만 실제로는 검색어에 대해 매칭되는 문서들..
[ElasticSearch] 집계함수 정의와 적용 PUT _index_template/scrap_template_wiki { "index_patterns" : [ "scrap_wiki_*" ], "template" : { "settings" : { "index" : { "analysis" : { "filter" : { "length_filter": { "type": "length", "min": 2 }, "nori_filter" : { "type" : "nori_part_of_speech", "stoptags" : [ "E", "IC", "J", "MAG", "MM", "NA", "NR", "SC", "SE", "SF", "SH", "SL", "SN", "SP", "SSC", "SSO", "SY", "UNA", "UNKNOWN", "VA", "VCN",..
[ElasticSearch] Script 쿼리와 Must 쿼리 해당 쿼리가 헷갈려서 복습을 위해 글을 작성하였다. Script 쿼리 script 쿼리는 Elasticsearch 내에서 사용자 정의 스크립트를 통해 문서를 필터링하거나 스코어링하는 데 사용되는 쿼리다. 이 스크립트는 "Painless"라는 Elasticsearch에서 제공하는 스크립트 언어를 사용하여 작성될 수 있다. script 쿼리의 주요 특징: 유연성: 사용자는 문서 필드의 값을 기반으로 복잡한 조건을 사용하여 문서를 필터링하거나 스코어링 할 수 있다. 성능 문제: 스크립트 쿼리는 다른 일반적인 쿼리에 비해 비용이 많이 들 수 있다. 따라서 대용량의 데이터셋에서 스크립트를 사용할 때는 성능에 주의해야 한다. 보안 문제: 이전 버전의 Elasticsearch에서는 Groovy와 같은 다른 스크립트 ..
[ElasticSearch] NativeQuery 도저히 @Query를 사용해서 로우 쿼리를 사용할 수가 없다. 에러도 많이 나고, 지원하지도 않으며 검사 역시 힘들기 때문이다. https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.misc.searchtemplates Spring Data Elasticsearch - Reference Documentation The Spring Data infrastructure provides hooks for modifying an entity before and after certain methods are invoked. Those so called EntityCallback instances prov..