fix: Prioritize exact phrase matches and fix case-sensitive search
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
@@ -481,6 +481,15 @@ export class SearchEngine {
|
||||
query
|
||||
)
|
||||
|
||||
let bestMatch: SearchMatch | undefined
|
||||
if (
|
||||
matches.length > 0 &&
|
||||
query.getBestStringForExcerpt() &&
|
||||
matches[0].match.toLowerCase() === query.getBestStringForExcerpt()
|
||||
) {
|
||||
bestMatch = matches.shift()
|
||||
}
|
||||
|
||||
const lowerCaseBasename = note.basename.toLowerCase()
|
||||
const titleMatchWord = foundWords.find(word =>
|
||||
lowerCaseBasename.includes(word.toLowerCase())
|
||||
@@ -514,6 +523,10 @@ export class SearchEngine {
|
||||
}
|
||||
}
|
||||
|
||||
if (bestMatch) {
|
||||
matches.unshift(bestMatch)
|
||||
}
|
||||
|
||||
logVerbose(`Matches for note "${note.path}"`, matches)
|
||||
const resultNote: ResultNote = {
|
||||
score: result.score,
|
||||
|
||||
@@ -95,11 +95,16 @@ export class TextProcessor {
|
||||
query &&
|
||||
(query.query.text.length > 1 || query.getExactTerms().length > 0)
|
||||
) {
|
||||
const best = text.indexOf(query.getBestStringForExcerpt())
|
||||
if (best > -1 && matches.find(m => m.offset === best)) {
|
||||
const bestMatchStr = query.getBestStringForExcerpt()
|
||||
const best = text.toLowerCase().indexOf(bestMatchStr)
|
||||
if (best > -1) {
|
||||
// We found the full query. We make it the first result, and remove any other match that it contains.
|
||||
matches = matches.filter(
|
||||
m => m.offset < best || m.offset >= best + bestMatchStr.length
|
||||
)
|
||||
matches.unshift({
|
||||
offset: best,
|
||||
match: query.getBestStringForExcerpt(),
|
||||
match: originalText.substring(best, best + bestMatchStr.length),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user