adjust search index

pull/502/head
Pete Matsyburka 4 months ago
parent cd477c880c
commit 57503eefd2

@ -56,7 +56,7 @@ module SearchEntries
end
[sql, number, number.length > 1 ? number.delete_prefix('0') : number, keyword]
elsif keyword.match?(/[^\p{L}\d&@._\-]/) || keyword.match?(/\A['"].*['"]\z/)
elsif keyword.match?(/[^\p{L}\d&@.\-]/) || keyword.match?(/\A['"].*['"]\z/)
['tsvector @@ plainto_tsquery(?)', TextUtils.transliterate(keyword.downcase)]
else
keyword = TextUtils.transliterate(keyword.downcase).squish
@ -180,15 +180,21 @@ module SearchEntries
end
def index_template(template)
sql = SearchEntry.sanitize_sql_array(
["SELECT to_tsvector(:text), to_tsvector('simple', :text)",
{ text: TextUtils.transliterate(template.name.to_s.downcase).delete("\0") }]
)
text = TextUtils.transliterate(template.name.to_s.downcase.squish).delete("\0")
sql = SearchEntry.sanitize_sql_array(["SELECT to_tsvector(:text), to_tsvector('simple', :text)", { text: }])
entry = template.search_entry || template.build_search_entry
entry.account_id = template.account_id
entry.tsvector, ngram = SearchEntry.connection.select_rows(sql).first
hyphens = text.scan(/\b[^\s]*?\d-[^\s]+?\b/) + text.scan(/\b[^\s]+-\d[^\s]*?\b/)
hyphens.uniq.each_with_index do |item, index|
entry.tsvector += " '#{item.delete("'")}':#{index + 1}" unless entry.tsvector.include?(item)
end
entry.ngram = build_ngram(ngram)
return if entry.tsvector.blank?
@ -205,15 +211,21 @@ module SearchEntries
def index_submission(submission)
return if submission.name.blank?
sql = SearchEntry.sanitize_sql_array(
["SELECT to_tsvector(:text), to_tsvector('simple', :text)",
{ text: TextUtils.transliterate(submission.name.to_s.downcase).delete("\0") }]
)
text = TextUtils.transliterate(submission.name.to_s.downcase.squish).delete("\0")
sql = SearchEntry.sanitize_sql_array(["SELECT to_tsvector(:text), to_tsvector('simple', :text)", { text: }])
entry = submission.search_entry || submission.build_search_entry
entry.account_id = submission.account_id
entry.tsvector, ngram = SearchEntry.connection.select_rows(sql).first
hyphens = text.scan(/\b[^\s]*?\d-[^\s]+?\b/) + text.scan(/\b[^\s]+-\d[^\s]*?\b/)
hyphens.uniq.each_with_index do |item, index|
entry.tsvector += " '#{item.delete("'")}':#{index + 1}" unless entry.tsvector.include?(item)
end
entry.ngram = build_ngram(ngram)
return if entry.tsvector.blank?

@ -53,7 +53,7 @@ module Submitters
end
[sql, number, weight, number.length > 1 ? number.delete_prefix('0') : number, weight]
elsif keyword.match?(/[^\p{L}\d&@._\-]/)
elsif keyword.match?(/[^\p{L}\d&@.\-]/)
terms = TextUtils.transliterate(keyword.downcase).split(/\b/).map(&:squish).compact_blank.uniq
if terms.size > 1

Loading…
Cancel
Save