@@ -25,67 +25,10 @@ km search 'content:"user:password"'
2525
2626---
2727
28- ## Resolved Issues
28+ ## Notes
2929
30- ### NOT Operator Issues (Resolved)
30+ ### Query Syntax
3131
32- ** Status:** Fixed
33-
34- ** Issue:** The NOT operator had two problems:
35- 1 . ** Standalone NOT crashed:** ` km search "NOT foo" ` threw FTS5 syntax error
36- 2 . ** NOT didn't exclude:** ` km search "foo AND NOT bar" ` returned documents containing both instead of excluding "bar"
37-
38- ** Resolution:**
39- - Implemented ` FtsQueryResult ` record to separate FTS query string from NOT terms
40- - Modified ` FtsQueryExtractor ` to collect NOT terms separately instead of passing them to FTS5
41- - Added LINQ post-filtering in ` NodeSearchService.SearchAsync() ` to exclude NOT terms
42- - Added ` GetAllDocumentsAsync() ` in ` SqliteFtsIndex ` to handle standalone NOT queries
43- - Case-insensitive filtering checks title, description, and content fields
44- - E2E tests added in ` SearchEndToEndTests.cs ` (tests: ` KnownIssue1_* ` )
45-
46- ** Important Note:** The infix query parser requires explicit AND between terms. Use:
32+ The infix query parser requires explicit AND between terms:
4733- ` foo AND NOT bar ` (correct) instead of ` foo NOT bar ` (incorrect - ignores NOT)
4834- ` (foo OR baz) AND NOT bar ` (correct) instead of ` (foo OR baz) NOT bar ` (incorrect)
49-
50- ** Files Changed:**
51- - ` src/Core/Search/NodeSearchService.cs ` - Added ` FtsQueryResult ` , ` NotTerm ` records and LINQ filtering
52- - ` src/Core/Search/SqliteFtsIndex.cs ` - Added ` GetAllDocumentsAsync() ` for standalone NOT support
53-
54- ---
55-
56- ### Quoted Phrases Don't Escape Operators (Resolved)
57-
58- ** Status:** Fixed
59-
60- ** Issue:** Cannot search for literal phrases containing reserved words like "AND", "OR", "NOT".
61-
62- ** Example:**
63- ``` bash
64- km put " Meeting with Alice AND Bob"
65- km search ' "Alice AND Bob"'
66- # Now works correctly and finds the document
67- ```
68-
69- ** Resolution:**
70- - The tokenizer correctly handles quoted strings and preserves them as literal text
71- - The FTS query extractor properly quotes phrases containing reserved words
72- - E2E tests added in ` SearchEndToEndTests.cs ` to prevent regression (tests: ` KnownIssue2_* ` )
73-
74- ---
75-
76- ## Testing Gaps
77-
78- These bugs were discovered through comprehensive E2E testing. Previous tests only verified:
79- - AST structure correctness
80- - LINQ expression building
81- - Direct FTS calls
82-
83- But did NOT test:
84- - Full pipeline: Parse -> Extract FTS -> Search -> Filter -> Rank
85- - Default settings (MinRelevance=0.3)
86- - Actual result verification
87-
88- ** Lesson:** Exit code testing and structure testing are insufficient. Must test actual behavior with real data.
89-
90- ---
91-
0 commit comments