mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-15 09:04:04 +02:00
48 lines
1.3 KiB
JavaScript
48 lines
1.3 KiB
JavaScript
const SearchEngine = require('lib/services/SearchEngine');
|
|
const Note = require('lib/models/Note');
|
|
|
|
class SearchEngineUtils {
|
|
static async notesForQuery(query, options = null) {
|
|
if (!options) options = {};
|
|
|
|
const results = await SearchEngine.instance().search(query);
|
|
const noteIds = results.map(n => n.id);
|
|
|
|
// We need at least the note ID to be able to sort them below so if not
|
|
// present in field list, add it.L Also remember it was auto-added so that
|
|
// it can be removed afterwards.
|
|
let idWasAutoAdded = false;
|
|
const fields = options.fields ? options.fields : Note.previewFields().slice();
|
|
if (fields.indexOf('id') < 0) {
|
|
fields.push('id');
|
|
idWasAutoAdded = true;
|
|
}
|
|
|
|
const previewOptions = Object.assign(
|
|
{},
|
|
{
|
|
order: [],
|
|
fields: fields,
|
|
conditions: [`id IN ("${noteIds.join('","')}")`],
|
|
},
|
|
options
|
|
);
|
|
|
|
const notes = await Note.previews(null, previewOptions);
|
|
|
|
// By default, the notes will be returned in reverse order
|
|
// or maybe random order so sort them here in the correct order
|
|
// (search engine returns the results in order of relevance).
|
|
const sortedNotes = [];
|
|
for (let i = 0; i < notes.length; i++) {
|
|
const idx = noteIds.indexOf(notes[i].id);
|
|
sortedNotes[idx] = notes[i];
|
|
if (idWasAutoAdded) delete sortedNotes[idx].id;
|
|
}
|
|
|
|
return sortedNotes;
|
|
}
|
|
}
|
|
|
|
module.exports = SearchEngineUtils;
|