Complete 'All Versions' search functionality - search across all Bible translations and default to 'all' on version selector page

This commit is contained in:
Ryderjj89
2025-09-29 10:55:02 -04:00
parent 5c19e2ed48
commit 74758cc284
2 changed files with 54 additions and 17 deletions

View File

@@ -225,18 +225,6 @@ app.get('/api/search', async (req, res) => {
return res.status(400).json({ error: 'Query must be at least 2 characters long' });
}
// Get the appropriate search engine for the version
let searchEngine;
if (version === 'esv' && esvSearchEngine) {
searchEngine = esvSearchEngine;
} else if (version === 'nlt' && nltSearchEngine) {
searchEngine = nltSearchEngine;
} else if (version === 'csb' && csbSearchEngine) {
searchEngine = csbSearchEngine;
} else {
searchEngine = nkjvSearchEngine; // default fallback
}
const options = {
bookFilter: book || null,
limit: parseInt(limit) || 50,
@@ -244,14 +232,58 @@ app.get('/api/search', async (req, res) => {
contextSize: 2
};
const results = await searchEngine.search(query, options);
let results = [];
let searchVersion = version;
if (version === 'all') {
// Search across all available versions
const allResults = [];
const searchEngines = [
{ engine: esvSearchEngine, version: 'esv' },
{ engine: nkjvSearchEngine, version: 'nkjv' },
{ engine: nltSearchEngine, version: 'nlt' },
{ engine: csbSearchEngine, version: 'csb' }
].filter(item => item.engine); // Only include engines that are available
for (const { engine, version: engineVersion } of searchEngines) {
try {
const versionResults = await engine.search(query, { ...options, limit: Math.ceil(options.limit / searchEngines.length) });
// Add version info to each result
const resultsWithVersion = versionResults.map(result => ({ ...result, searchVersion: engineVersion }));
allResults.push(...resultsWithVersion);
} catch (error) {
console.log(`Search failed for ${engineVersion}:`, error.message);
}
}
// Sort by relevance and limit total results
results = allResults
.sort((a, b) => b.relevance - a.relevance)
.slice(0, options.limit);
searchVersion = 'all';
} else {
// Search in specific version
let searchEngine;
if (version === 'esv' && esvSearchEngine) {
searchEngine = esvSearchEngine;
} else if (version === 'nlt' && nltSearchEngine) {
searchEngine = nltSearchEngine;
} else if (version === 'csb' && csbSearchEngine) {
searchEngine = csbSearchEngine;
} else {
searchEngine = nkjvSearchEngine; // default fallback
}
results = await searchEngine.search(query, options);
}
res.json({
query,
results,
total: results.length,
hasMore: results.length === options.limit,
version
version: searchVersion
});
} catch (error) {
console.error('Search error:', error);