thumbnail
9_10. text index 생성하기
mongoDB
2023.04.03.

9_10. text index 생성하기

이번엔 제목(title), 내용(content)을 검색하는 것에 대해 다뤄볼 것이다.

20230403 111855

type이 text인 인덱스가 생성된 것을 볼 수 있다.

20230403 112047

필드값으로 조회하는 것이 아닌, $text로 조회를 한다.
콜렉션 하나당 text 인덱스는 하나만 걸 수 있다.
그래서 조회할 때, title 또는 content를 적어서 조회할 필요가 없는 것이다.

20230403 113341

위와 같이 IXSCAN을 쓴 것을 볼 수 있다.

그런데 아쉽게도 정확한 단어가 아니면 탐색이 되지 않는다.

20230403 114028

cumq와 정확히 일치하는 단어만 검색한다.

20230403 114149

그리고 두개의 단어를 검색한다면, 두 개 중에 하나만 일치해도 결과로 내보내준다.

9_10_1. title, content 둘 다 text 인덱스를 걸고싶다면

20230403 114511

아까랑 똑같은 단어로 검색했는데, 아까는 31개, 지금은 52개가 검색결과로 나왔다.
content까지 같이 검색하면서 검색결과가 많아졌다.

20230403 114626 20230403 114628

그리고 Explain Plan을 보면 재밌는게, 위와 같이 IXSCAN을 두번 한다.

  • IXSCAN: 2개 방식으로 인덱스 스캔을하고
    • 각 방식으로 결과가 각각 21개, 32개 -> 총 53개가 나왔는데,
  • OR: 그리고 그 중에 하나라도 해당되는게 있으면 통과
    • 위에서 총 53개가 나왔는데 왜 52개냐면 겹치는게 있기 때문.
  • FETCH
    • 각 인덱스를 원본 document로 패치시켜주고
  • TEXT MATCH
    • 텍스트 매칭시켜줘서 결과물 내보냄

9_10_2. text 인덱스가 하는 일

  • 중복 단어 제거
  • 의미 없는 단어 제거 is, of, if, …
  • 검색에 쓰일만한 단어들만 뽑아낸 후 인덱스를 걸어줌 (오름차순이든 내림차순이든 인덱스를 검)

text 인덱스 말고 더 성능이 좋은 인덱스가 나옴
이는 나중에 살펴보자.
(구글 같은 정말 세밀한 검색엔진이 필요하다면 그때 찾아보면됨)

Thank You for Visiting My Blog, Have a Good Day 😆
© 2022 Developer hyungju-lee, Powered By Gatsby.