From 6225abe9b35c5b7257e5be6f22fb9bc9df2a15c2 Mon Sep 17 00:00:00 2001 From: Runar Ingebrigtsen Date: Fri, 23 Jan 2026 00:35:01 +0100 Subject: [PATCH] support partial word match --- app/models/entry.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/models/entry.rb b/app/models/entry.rb index 7db4743..a098f38 100644 --- a/app/models/entry.rb +++ b/app/models/entry.rb @@ -15,8 +15,11 @@ class Entry < ApplicationRecord def self.search(query, language_code: nil) return all if query.blank? + terms = query.to_s.strip.split(/\s+/).map { |term| term.gsub('"', '""') }.reject(&:blank?) + return all if terms.empty? + prefix = valid_lang?(language_code) ? "#{language_code}:" : "" - fts_query = "#{prefix}\"#{query.to_s.gsub('"', '""')}\"" + fts_query = terms.map { |term| "#{prefix}\"#{term}\"*" }.join(" ") joins("JOIN entries_fts ON entries_fts.rowid = entries.id") .where("entries_fts MATCH ?", fts_query)