support partial word match
This commit is contained in:
+4
-1
@@ -15,8 +15,11 @@ class Entry < ApplicationRecord
|
|||||||
def self.search(query, language_code: nil)
|
def self.search(query, language_code: nil)
|
||||||
return all if query.blank?
|
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}:" : ""
|
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")
|
joins("JOIN entries_fts ON entries_fts.rowid = entries.id")
|
||||||
.where("entries_fts MATCH ?", fts_query)
|
.where("entries_fts MATCH ?", fts_query)
|
||||||
|
|||||||
Reference in New Issue
Block a user