Complete 'All Versions' search functionality - search across all Bible translations and default to 'all' on version selector page
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user