본문 바로가기

검색엔진

Symspell 알고리즘 살펴보기 Symspell은 "오타교정", "유사검색어 제안" 기능에서 활용되는 알고리즘이다. Peter Norving도 오타교정에서 유명한 알고리즘이다. 그러나 연산비용이 높기 중국어 같은 언어에서는 활용할 수 없다는 한계점이 있다. ( 글자를 표현하는 유니코드의 종류가 다양하기 때문에 후보군을 모두 계산하기 어렵다. ) Symspell 알고리즘은 Peter Norving 알고리즘의 단점을 보강한 알고리즘이다. 그래서 Peter Norving에 비하여 빠르고, 여러 자연어에서도 활용할 수 있단 장점이 있다. Symspell은 두가지 접근방법 덕분에 연산 비용을 줄이고, 속도를 개선할 수 있었다. 오타 후보군을 사전에 계산하기 DELETE 방식으로만 후보군 계산하기 오타 후보군을 사전에 계산하기 symspell은 ..
Peter Norvig’s 알고리즘 살펴보기 Peter Norvig’s은 대표적인 오타교정 알고리즘이다. 피터노빙 알고리즘을 사용하면 오탈자 키워드가 Input 값으로 주어졌을 때, 해당 오타 키워드를 교정한 단어를 Output으로 주는 함수를 만들 수 있다. 동작 원리 첫번째 단계 : 단어 사전 구축 하기 1. 교정 사전으로 활용할 텍스트 파일을 준비한다. 2. 텍스트 파일에서 단어와 언급수를 계산해둔다. 단어가 언급된 수는 오타 교정 후보 단어가 여러개 나온 경우, 교정 단어의 우선순위를 정할때 사용한다. 두번째 단계 : 키워드 교정하기 1. 검색 키워드를 오타교정 함수에 전달한다. 2. 단어 사전에 있는 키워드인 경우, 그대로 키워드를 반환한다. 이 경우, 검색 키워드가 표준어라고 볼 수 있기 때문이다. 3. 단어사전에서 키워드를 찾지 못한 ..
elasticsearch와 RDB 데이터 저장하기 #시작 오늘은 엘라스틱서치 기술 블로그에서 흥미롭게 읽었던 자료를 함께 살펴보는 시간을 가져보려고 합니다. 설명드릴 블로그 포스팅은 Keeping Elasticsearch in Sync입니다. https://www.elastic.co/kr/blog/found-keeping-elasticsearch-in-sync#the-bulk-api-a-must-for-most-applications Keeping Elasticsearch in Sync One of the trickiest parts of integrating Elasticsearch into an existing app is figuring out how to manage the flow of data from an authoritative data ..
(ElasticSearch) 엘라스틱서치에 데이터 싱크하기 ( 4 ) - 안티패턴과 멱등성 관리 이 글은 [elastic] Keeping Elasticsearch in Sync 문서를 정리한 글 입니다 ㅎㅅㅎ 엘라스틱서치에 원본 데이터를 싱크할 때, 주의해야하는 점이 있다. Why Marking Source Records is an Anti-Pattern엘라스틱서치 인덱싱 필요 여부를 체크하는 방법 중, 원본 테이블에 필드를 하나 추가하는 방법이 있다. 그런데 이건 안티패턴이다. 하면 안된다. 안티패턴인 이유 1. 엘라스틱서치 데이터 복제와 원본 데이터 간의 커플링이 높아진다. 그러면 유지보수가 어렵다. - 장애로 실제 인덱싱 여부와 원본 데이터에 저장된 인덱싱 여부가 달라질 수도 있다. 2. 전체 테이블을 재인덱싱해야하는 경우, 전체 테이블을 업데이트해줘야한다. UPDATE SET reindex=..
(ElasticSearch) 엘라스틱서치에 데이터 싱크하기 ( 3 ) - Batching Based on Ranges 이 글은 [elastic] Keeping Elasticsearch in Sync 문서를 정리한 글 입니다 ㅎㅅㅎ 이전글 ((ElasticSearch) 엘라스틱서치에 데이터 싱크하기 ( 2 ))에서는 계속 변경되는 데이터를 엘라스틱서치에 싱크하는 방법에 대해서 설명했다.이번에는 Immutable한 데이터를 엘라스틱서치에 추가하는 방법에 대해서 설명하고자 한다. Batching Based on RangesImmutable한 데이터의 예시로는 로그가 있다. 로그는 한번 추가되어도, 변경되지 않는 데이터다. 그래서 이 경우에는 ElasticSearch에 Insert만한다. Update는 필요하지 않다. 이 경우, 큐를 이용해서 배치에 사용될 데이터를 가져오는건 오버스펙이다. 단순하게, 데이터를 가져와야하는 범위..