Hi 난 하상원 27세
오늘은 소소한 알고리즘 코드를 짜는 일이 있어서 적어보려고 한다.
파이어 베이스는 풀 텍스트 서치를 지원하지 않는다.
만약 DB에 하상원이라는 문자열이 저장되어 있다면,
검색 기능을 만들었을 때 where( 검색어, ==, name ) 으로 검색할 수 있다.
하지만 이건 검색창에 꼭 하상원을 써야한다. 상원으로는 검색할 수 없다.
그렇다면 모든 데이터를 받아와서 스테이트에 저장하고 내부에서 검색하면 어떨까
그건 안된다.
검색 한 번 할 때마다 모든 데이터를 저장하고 저장한 스테이트에서 필터를 돌려야하는데,
파이어 베이스는 리드 수 당 돈을 낸다. 고로 이따위로 짰다간 회사가 망할 수 있다.
대신에 파이어베이스엔 array-contains-any가 있다.
검색어가 배열 중 뭐 하나만 포함하고 있으면 반환한다.
where( 검색어, array-contains, nameArray )
이렇게 쓰는데, 만약에 이름이 하상원이라고 들어오면 추가적으로 하상원을 검색할 수 있는 모든 조건을 배열 안에 넣어주면 되는 것이다 !
[하, 상, 원, 하상, 상원, 하상원] <- 이렇게 만들고 여기서 검색하면 유사 풀 텍스트 서치가 완성된다.
그래서 Full text search를 위한 검색 array 알고리즘을 만들게 되었다.
은근히 아이디어 안 떠오르는게 약올라서 블로그에 정리한다.
지깟게 까불어봐야 반복문 아니겠나 ㅋ
대충 내용은 전체 문자열 길이만큼 반복하고(한 개일때, 두 개일때 등의 연속적인 문자)
그 안에서 첫번째에서 시작, 두번째에서 시작 이렇게 하면서 길이만큼 딱 떨어지게 저장했다.
하원을 검색하면 하상원이 나올 필요는 없으니까 그랬다.
하여튼 이렇게 끝이 났다.
열심히 공부하고 잘 일하자
아자아자 화이팅
'Computer Science > Algorithm' 카테고리의 다른 글
[Codekata] 중복되지 않은 제일 긴 단어의 길이 반환 (2) | 2022.06.10 |
---|
댓글