Skip to content

[improve] whitespace 핸들링: split 모드 세션 reuse, cross-token 중복 점령 완화, spill-barrier 모드 #27

Description

@mundi4

리뷰에서 나온 whitespace 관련 개선점 모음. 각각 독립 PR 가능.

1. split 모드 세션 prefix reuse (TODO.md에 기재된 항목의 구체화)

split 모드는 outer Query.atoms""createSearcher 세션 최적화가 전면 비활성 — 매 키스트로크 전체 재스캔입니다. split이 가장 팔레트다운 모드인데 최적화가 빠진 상태.

실전 최빈 패턴은 마지막 토큰만 확장이므로 완전한 sub-query 동치성 정의 없이도 커버 가능:

  • 세션 키를 sub-query별 atoms를 \x00 등 구분자로 join한 문자열로 구성
  • "앞 토큰들 완전 동일 + 마지막 토큰이 prefix 확장"일 때만 이전 매치 인덱스 재사용
  • 토큰 순서가 바뀌거나 토큰 수가 줄면 세션 단절 (안전 우선)

주의: atom-prefix dedup("a ab"["ab"])이 토큰 집합을 바꾸므로 dedup 의 sub-query 기준으로 키를 만들어야 함.

2. cross-token 중복 점령 완화 옵션

"참고 참고"류 쿼리에서 두 토큰이 같은 span에 매치되어 AND의 실질 의미가 약해지는 것은 readme에 문서화된 트레이드오프. joint 최적화는 비용이 크지만, 최소 비용 완화로:

  • sub 간 indices가 완전 동일하면 reject (또는 감점)

정도는 저렴하게 추가 가능. 실사용 빈도 관찰 후 도입 판단.

3. readme의 미구현 4번째 정책 — 공백 = spill 차단 경계

readme에 언급된 "공백을 매치 대상에서 제외하되 spill이 넘지 못하는 경계로만 취급"은 "ignore"(경계 무시)와 "split"(순서 무관 AND)의 중간 성격. "ignore"가 과하게 관대하다고 느껴지는 케이스(토큰 경계를 넘는 tail spill)에 대한 좋은 노브가 될 수 있음. 수요 확인 후 WhitespaceMode에 추가 검토.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions