fix: JLCPCB database download and FTS search

The JLCSearch API (jlcsearch.tscircuit.com) /components/list.json
endpoint ignores the offset parameter, returning the same 100 parts
on every request. This caused download_jlcpcb_database to loop
indefinitely, importing duplicate data for hours while blocking the
single-threaded Python process.

- Add download_jlcpcb.py: standalone script that downloads the
  pre-built jlcparts database from yaqwsx/jlcparts GitHub Pages
  (~1GB compressed, 7M+ parts, completes in ~4 minutes)
- Fix FTS search: add prefix wildcards to search terms so partial
  MPN matches work (e.g. "BQ25895" now finds "BQ25895RTWR")
This commit is contained in:
Leah Armstrong
2026-03-24 12:04:29 -04:00
parent 1647c282f3
commit ca40a2b332
2 changed files with 269 additions and 1 deletions

View File

@@ -280,13 +280,19 @@ class JLCPCBPartsManager:
if query:
# Use FTS for text search
# Add prefix wildcard to each term for partial matching
# (e.g., "BQ25895" becomes "BQ25895*" so FTS matches "BQ25895RTWR")
fts_query = " ".join(
f"{term}*" if not term.endswith("*") else term
for term in query.strip().split()
)
sql_parts.append('''
AND lcsc IN (
SELECT lcsc FROM components_fts
WHERE components_fts MATCH ?
)
''')
params.append(query)
params.append(fts_query)
if category:
sql_parts.append("AND category LIKE ?")