Add support for Japanese all-entity search

This commit is contained in:
Justin Edmund 2023-07-05 21:12:51 -07:00
parent 5473c1c579
commit bd6cdc8650

View file

@ -3,32 +3,49 @@
module Api module Api
module V1 module V1
class SearchController < Api::V1::ApiController class SearchController < Api::V1::ApiController
def all TRIGRAM = {
trigram = {
trigram: { trigram: {
threshold: 0.3 threshold: 0.3
} }
} }.freeze
tsearch = { TSEARCH_WITH_PREFIX = {
tsearch: { tsearch: {
prefix: true, prefix: true,
dictionary: 'simple' dictionary: 'simple'
} }
} }.freeze
def all
locale = search_params[:locale] || 'en'
PgSearch.multisearch_options = { using: trigram } case locale
results = PgSearch.multisearch(search_params[:query]).limit(10) when 'en'
results = search_all_en
if (results.length < 5) && (search_params[:query].length >= 2) when 'ja'
PgSearch.multisearch_options = { using: tsearch } results = search_all_ja
results = PgSearch.multisearch(search_params[:query], { using: tsearch }).limit(10)
end end
render json: SearchBlueprint.render(results, root: :results) render json: SearchBlueprint.render(results, root: :results)
end end
def search_all_en
PgSearch.multisearch_options = { using: TRIGRAM }
results = PgSearch.multisearch(search_params[:query]).limit(10)
if (results.length < 5) && (search_params[:query].length >= 2)
PgSearch.multisearch_options = { using: TSEARCH_WITH_PREFIX }
results = PgSearch.multisearch(search_params[:query]).limit(10)
end
results
end
def search_all_ja
PgSearch.multisearch_options = { using: TSEARCH_WITH_PREFIX }
PgSearch.multisearch(search_params[:query]).limit(10)
end
def characters def characters
filters = search_params[:filters] filters = search_params[:filters]
locale = search_params[:locale] || 'en' locale = search_params[:locale] || 'en'