Skip to content

[feat] 대화방 검색 (제목·채팅 내용) #42

Description

@theminjunchoi

배경 / 목표

대화방을 제목뿐 아니라 채팅 내용으로도 검색할 수 있게 한다. 대화방 제목은 클라가 카드 생성 시 넘겨주는 요약(Card.summary)이다.

제안 해결책

  • 검색 대상: 본인 대화 중 Card.summary(제목) 또는 Message.content(채팅 내역)가 키워드에 매칭되는 대화방.
  • 엔진: 지금은 MySQL로 충분(초기 규모, 짧은 텍스트). ES는 학습용으로 나중에 붙이되, ConversationSearchPort 인터페이스 뒤에 구현을 두어 호출부 변경 없이 교체 가능하게 한다.
    • 1차 구현: MySQL 8.0 ngram 풀텍스트 인덱스(한글 대응) — messages.content, cards.summary에 FULLTEXT 추가.
    • 2차(추후): ElasticsearchConversationSearch (별도 요청 시).
  • API: GET /api/conversations/search?keyword=&page=&size= (로그인 필요, 본인 대화만). 최신순 페이징.
  • 응답: 대화방 목록 — { conversationId, title(=Card.summary, 진행 중이면 null), status, createdAt }.

완료 조건(DoD)

  • 제목 또는 채팅 내용에 키워드가 포함된 본인 대화방이 검색된다(한글 포함).
  • 결과는 최신순 페이징.
  • 검색 로직이 ConversationSearchPort 뒤에 있어 엔진 교체 가능(ES 대비).
  • 서비스/쿼리 테스트.

기술 고려사항

  • ngram 파서 최소 토큰 크기(기본 2) 때문에 1자 검색은 무시 → 키워드 최소 길이 가드.
  • 마이그레이션 V9: messages.content, cards.summaryFULLTEXT ... WITH PARSER ngram.
  • 검색 대상 메시지는 유저·캐릭터 발화 모두 포함(채팅 내역 전체).

범위 밖(추후)

  • 엘라스틱서치 2차 구현(학습용)
  • 매칭 스니펫/하이라이트

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions