test(integration): address round-2 review — searchability robustness
- Bump nc_semantic_search limit 10->50 in document_is_searchable: a freshly indexed note can rank below seed data (e.g. deck cards) in a crowded corpus, and the query is cheap. - Fix the note_id-less fallback to token-match (all words present) instead of contiguous-substring match, so multi-word search terms work when a caller omits note_id. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
eefa326c09
commit
909f36613d
@@ -23,7 +23,9 @@ async def document_is_searchable(
|
|||||||
try:
|
try:
|
||||||
search = await mcp_client.call_tool(
|
search = await mcp_client.call_tool(
|
||||||
"nc_semantic_search",
|
"nc_semantic_search",
|
||||||
arguments={"query": search_term, "limit": 10, "score_threshold": 0.0},
|
# limit is generous: a fresh note can sit below seed data (e.g. deck
|
||||||
|
# cards) in a crowded corpus, and the query is cheap.
|
||||||
|
arguments={"query": search_term, "limit": 50, "score_threshold": 0.0},
|
||||||
)
|
)
|
||||||
except Exception as e: # transient transport/availability blip — keep polling
|
except Exception as e: # transient transport/availability blip — keep polling
|
||||||
logger.debug("Semantic search poll failed: %s", e)
|
logger.debug("Semantic search poll failed: %s", e)
|
||||||
@@ -33,11 +35,15 @@ async def document_is_searchable(
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
results = json.loads(search.content[0].text).get("results", [])
|
results = json.loads(search.content[0].text).get("results", [])
|
||||||
needle = search_term.lower()
|
# Token match (not contiguous substring) so multi-word terms work in the
|
||||||
|
# note_id-less fallback path.
|
||||||
|
tokens = search_term.lower().split()
|
||||||
for r in results:
|
for r in results:
|
||||||
if note_id is not None:
|
if note_id is not None:
|
||||||
if r.get("id") == note_id and r.get("doc_type") == "note":
|
if r.get("id") == note_id and r.get("doc_type") == "note":
|
||||||
return True
|
return True
|
||||||
elif needle in f"{r.get('title', '')} {r.get('excerpt', '')}".lower():
|
else:
|
||||||
return True
|
haystack = f"{r.get('title', '')} {r.get('excerpt', '')}".lower()
|
||||||
|
if tokens and all(t in haystack for t in tokens):
|
||||||
|
return True
|
||||||
return False
|
return False
|
||||||
|
|||||||
Reference in New Issue
Block a user