У меня есть приложение Rails4 с Postgresql (PG_search) на MAC. Я создал словарь синонимов через миграцию рельсов. Словарь синонимов несколько работает. Настройка нижеRails Postgresql - словарь синонимов несколько не обновляется
Миграции
CREATE TEXT SEARCH DICTIONARY custom_synonyms_for_keywords (TEMPLATE = synonym, SYNONYMS = synonyms_for_keywords);
CREATE TEXT SEARCH CONFIGURATION simple_syns_keywords (copy=simple);
ALTER TEXT SEARCH CONFIGURATION simple_syns_keywords ALTER MAPPING FOR asciiword WITH custom_synonyms_for_keywords;
my_synonyms файл:
fshk bim24os
холодильник холодильник
Postgres PGSQL
PgSQL
PostgreSQL индексы индекса *
Контроллер
class Product < ActiveRecord::Base
pg_search_scope :pg_search, against: :sku,
using: {
tsearch: { prefix: true, dictionary: "simple_syns_keywords" }
}
end
Когда я бегу
Product.pg_search("fshk") # returns record of "bim24os"
Product.pg_search("fridge") # returns no record of "refrigerator"
Но когда я запускаю это, она возвращает правильное значение
SELECT ts_lexize('custom_synonyms_for_keywords', 'fshk'); # returns "bim24os"
SELECT ts_lexize('custom_synonyms_for_keywords', 'fridge'); # returns "refrigerator"
РЕЗУЛЬТАТЫ
Product.pg_search("fshk")
Product Load (3.0ms) SELECT "products".*, ((ts_rank((to_tsvector('simple_syns_keywords', coalesce("products"."sku"::text, ''))), (to_tsquery('simple_syns_keywords', ''' ' || 'fshk' || ' ''' || ':*')), 0))) AS pg_search_rank FROM "products" WHERE (((to_tsvector('simple_syns_keywords', coalesce("products"."sku"::text, ''))) @@ (to_tsquery('simple_syns_keywords', ''' ' || 'fshk' || ' ''' || ':*')))) ORDER BY pg_search_rank DESC, "products"."id" ASC
=> #<ActiveRecord::Relation [#Product id: 1, sku: "BIM24OS"]
Product.pg_search("fridge")
Product Load (1.8ms) SELECT "products".*, ((ts_rank((to_tsvector('simple_syns_keywords', coalesce("products"."sku"::text, ''))), (to_tsquery('simple_syns_keywords', ''' ' || 'fridge' || ' ''' || ':*')), 0))) AS pg_search_rank FROM "products" WHERE (((to_tsvector('simple_syns_keywords', coalesce("products"."sku"::text, ''))) @@ (to_tsquery('simple_syns_keywords', ''' ' || 'fridge' || ' ''' || ':*')))) ORDER BY pg_search_rank DESC, "products"."id" ASC
=> ActiveRecord::Relation []
У меня нет шага, потому что я не уверен, почему он не работает. Любая помощь приветствуется.
Благодаря
Пожалуйста, покажите запрос SQL, который Rails генерирует для обоих запросов продукта. Также, пожалуйста, покажите оригинальные операторы 'CREATE' для' my_synonyms'. –
i обновил вопрос с результатами поиска –
Добавили холодильник? Я считаю, что словари кэшируются для каждого соединения - перезапуск консоли изменит результаты? –