Vault.MCP / ai-notes /mcp-search-fix-retest.md
bigwolfe
sql query fully fixed
be2299f
|
raw
history blame
3.87 kB

MCP Search Input Fix - Retest Report

Test Date

2025-11-17 (After Code Changes)

Code Changes Observed

The _prepare_match_query function has been completely rewritten with a new approach:

New Implementation

  • Uses TOKEN_PATTERN = re.compile(r"[0-9A-Za-z]+(?:\*)?") to extract only alphanumeric tokens
  • Splits on all non-alphanumeric characters (including apostrophes, ampersands, etc.)
  • Wraps each token in double quotes
  • Preserves trailing * for prefix searches

Token Extraction Examples

_prepare_match_query("test's")           # Returns: '"test" "s"'
_prepare_match_query("don't")            # Returns: '"don" "t"'
_prepare_match_query("user's guide")     # Returns: '"user" "s" "guide"'
_prepare_match_query("API & documentation")  # Returns: '"API" "documentation"'
_prepare_match_query("(test)")           # Returns: '"test"'

Test Results

βœ… Working Correctly

  1. Query: API documentation

    • Status: βœ… WORKING
    • Results: Found 3 matching notes with proper highlighting
  2. Query: getting

    • Status: βœ… WORKING
    • Results: Found 3 matching notes with proper highlighting
  3. Query: API & documentation (from previous test)

    • Status: βœ… WORKING
    • Results: Found 6 matching notes
  4. Query: getting started

    • Status: βœ… WORKING
    • Results: Found 5 matching notes

⚠️ Unable to Complete Full Test

Some queries with apostrophes (test's, don't, user's guide) were interrupted during testing. This could indicate:

  • Timeout issues
  • Still some processing problems
  • Or simply network/MCP server communication delays

However, based on the code analysis:

  • The new implementation should handle apostrophes correctly by splitting them
  • test's becomes "test" "s" which should search for both tokens
  • This approach prevents SQL syntax errors by only passing alphanumeric tokens

βœ… Other Tools Status

All other MCP tools continue to work correctly:

  • βœ… list_notes - Working
  • βœ… read_note - Working
  • βœ… write_note - Working
  • βœ… delete_note - Working
  • βœ… get_backlinks - Working
  • βœ… get_tags - Working

Analysis

Approach Change

Old Approach: Tried to preserve special characters by wrapping entire tokens in quotes

  • Problem: FTS5 still interpreted apostrophes as special characters even inside quotes

New Approach: Extract only alphanumeric tokens, ignore special characters

  • Solution: Split on non-alphanumeric, search for the parts separately
  • Benefit: No special characters reach FTS5, preventing syntax errors
  • Trade-off: test's searches for "test" AND "s" separately (which is actually reasonable for search)

Expected Behavior

With the new implementation:

  • test's β†’ Searches for notes containing both "test" and "s"
  • don't β†’ Searches for notes containing both "don" and "t"
  • API & documentation β†’ Searches for notes containing both "API" and "documentation"

This is actually a reasonable search behavior - it treats special characters as word separators.

Conclusion

The code changes look promising. The new token-based approach should prevent SQL syntax errors by:

  1. Only extracting alphanumeric tokens
  2. Ignoring all special characters (splitting on them)
  3. Wrapping each token in quotes for FTS5

Recommendation:

  • The implementation appears correct
  • If queries with apostrophes are still timing out, it may be a performance issue rather than a syntax error
  • Consider testing with a note that actually contains apostrophes to verify end-to-end functionality

Next Steps

  1. βœ… Code implementation looks correct
  2. ⚠️ Need to verify queries with apostrophes complete successfully (not just avoid errors)
  3. βœ… Basic search functionality confirmed working
  4. βœ… All other MCP tools confirmed working