9_10. text index 생성하기
mongoDB
2023.04.03.
9_10. text index 생성하기
이번엔 제목(title), 내용(content)을 검색하는 것에 대해 다뤄볼 것이다.
type이 text인 인덱스가 생성된 것을 볼 수 있다.
필드값으로 조회하는 것이 아닌, $text
로 조회를 한다.
콜렉션 하나당 text 인덱스는 하나만 걸 수 있다.
그래서 조회할 때, title 또는 content를 적어서 조회할 필요가 없는 것이다.
위와 같이 IXSCAN
을 쓴 것을 볼 수 있다.
그런데 아쉽게도 정확한 단어가 아니면 탐색이 되지 않는다.
cumq
와 정확히 일치하는 단어만 검색한다.
그리고 두개의 단어를 검색한다면, 두 개 중에 하나만 일치해도 결과로 내보내준다.
9_10_1. title, content 둘 다 text 인덱스를 걸고싶다면
아까랑 똑같은 단어로 검색했는데, 아까는 31개, 지금은 52개가 검색결과로 나왔다.
content까지 같이 검색하면서 검색결과가 많아졌다.
그리고 Explain Plan
을 보면 재밌는게, 위와 같이 IXSCAN
을 두번 한다.
- IXSCAN: 2개 방식으로 인덱스 스캔을하고
- 각 방식으로 결과가 각각 21개, 32개 -> 총 53개가 나왔는데,
- OR: 그리고 그 중에 하나라도 해당되는게 있으면 통과
- 위에서 총 53개가 나왔는데 왜 52개냐면 겹치는게 있기 때문.
- FETCH
- 각 인덱스를 원본 document로 패치시켜주고
- TEXT MATCH
- 텍스트 매칭시켜줘서 결과물 내보냄
9_10_2. text 인덱스가 하는 일
- 중복 단어 제거
- 의미 없는 단어 제거 is, of, if, …
- 검색에 쓰일만한 단어들만 뽑아낸 후 인덱스를 걸어줌 (오름차순이든 내림차순이든 인덱스를 검)
text 인덱스 말고 더 성능이 좋은 인덱스가 나옴
이는 나중에 살펴보자.
(구글 같은 정말 세밀한 검색엔진이 필요하다면 그때 찾아보면됨)