2022-02-10 TIL

Fact

  • algolia의 quiz index에 퀴즈가 추가되면 해당 퀴즈 데이터를 저장하도록 구현했다.
  • 검색어를 입력하면 검색어에 맞는 데이터를 가져오도록 구현했다.

Feelings

  • algolia를 사용한 이유는 원래 Query String를 사용해서 문자열을 가져와서 데이터베이스 연산으로 검색 기능을 구현하려고 했으나, 적은 양의 데이터 라고 한다면 상관이 없겠지만 데이터가 많아질수록 데이터베이스 자체 연산으로 데이터를 가져오기엔 한계를 느낄 것으로 예상하여 도입했다 자세한 내용은 https://www.algolia.com/doc/guides/getting-started/what-is-algolia/

Findings

  • algolia는 웹 검색을 제공하는 SaaS 서비스 제품입니다.

algolia index에 json 데이터를 저장하는 코드다.

const algoliasearch = require('algoliasearch')

const ALGOLIA_APP_ID = process.env.ALGOLIA_APP_ID
const ALGOLIA_API_KEY = process.env.ALGOLIA_API_KEY
const ALGOLIA_INDEX_NAME = process.env.ALGOLIA_INDEX_NAME

const client = algoliasearch(ALGOLIA_APP_ID, ALGOLIA_API_KEY)
const index = client.initIndex(ALGOLIA_INDEX_NAME)

index.saveObjects([data], { autoGenerateObjectIDIfNotExist: true })

autoGenerateObjectIDIfNotExist: true를 설정 안 해줘서 살짝 삽질했다..

공식 문서에 나와있는 글을 보면 false일 경우 objectID를 포함하지 않는 객체를 저장할 경우 에러가 발생한다고 했는데, 아무런 에러가 발생하지 않는다.. 단지 저장이 안 된다

그렇다 index에 데이터를 저장하기 위해선 objectID를 넣어주어야 한다. 아니면 autoGenerateObjectIDIfNotExist를 true로 설정해 주고 몽고디비 ObjectId처럼 엔진이 자동으로 지정해 주도록 해야 한다. Java, JavaScript, PHP and .NET는 기본값이 false라고 한다.

When false, if any of the objects doesn’t contain an objectID, the method throws an error. When true, if any of the objects doesn’t contain an objectID, the engine automatically assigns one. Note: Java, JavaScript, PHP and .NET default to false.


  • algolia index 검색도 똑같이 하면 된다. 입력값은 무조건 query string만 가능하다.
index.search('query string') //무조건 쿼리스트링만 가능하다.

Future Action

  • 퀴즈리스트 컴포넌트를 재사용할 방법을찾아봐야겠다.