리뷰에서 나온 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에 추가 검토.
리뷰에서 나온 whitespace 관련 개선점 모음. 각각 독립 PR 가능.
1. split 모드 세션 prefix reuse (TODO.md에 기재된 항목의 구체화)
split 모드는 outer
Query.atoms가""라createSearcher세션 최적화가 전면 비활성 — 매 키스트로크 전체 재스캔입니다. split이 가장 팔레트다운 모드인데 최적화가 빠진 상태.실전 최빈 패턴은 마지막 토큰만 확장이므로 완전한 sub-query 동치성 정의 없이도 커버 가능:
\x00등 구분자로 join한 문자열로 구성주의: atom-prefix dedup(
"a ab"→["ab"])이 토큰 집합을 바꾸므로 dedup 후의 sub-query 기준으로 키를 만들어야 함.2. cross-token 중복 점령 완화 옵션
"참고 참고"류 쿼리에서 두 토큰이 같은 span에 매치되어 AND의 실질 의미가 약해지는 것은 readme에 문서화된 트레이드오프. joint 최적화는 비용이 크지만, 최소 비용 완화로:indices가 완전 동일하면 reject (또는 감점)정도는 저렴하게 추가 가능. 실사용 빈도 관찰 후 도입 판단.
3. readme의 미구현 4번째 정책 — 공백 = spill 차단 경계
readme에 언급된 "공백을 매치 대상에서 제외하되 spill이 넘지 못하는 경계로만 취급"은
"ignore"(경계 무시)와"split"(순서 무관 AND)의 중간 성격."ignore"가 과하게 관대하다고 느껴지는 케이스(토큰 경계를 넘는 tail spill)에 대한 좋은 노브가 될 수 있음. 수요 확인 후WhitespaceMode에 추가 검토.