{"record":{"id":"de6012b187a2df54","repo":"ankane/searchkick","slug":"search-synonyms-are-not-supported-yet-for-language","errorCode":null,"errorMessage":"Search synonyms are not supported yet for language","messagePattern":"Search synonyms are not supported yet for language","errorType":"exception","errorClass":"Searchkick::Error","httpStatus":null,"severity":"error","filePath":"lib/searchkick/index_options.rb","lineNumber":620,"sourceCode":"            updateable: true\n          }\n        else\n          synonym_graph = {\n            type: \"synonym_graph\",\n            # TODO confirm this is correct\n            synonyms: search_synonyms.select { |s| s.size > 1 }.map { |s| s.is_a?(Array) ? s.join(\",\") : s }.map(&:downcase)\n          }\n        end\n        settings[:analysis][:filter][:searchkick_synonym_graph] = synonym_graph\n\n        if [\"japanese\", \"japanese2\"].include?(options[:language])\n          [:searchkick_search, :searchkick_search2].each do |analyzer|\n            settings[:analysis][:analyzer][analyzer][:filter].insert(4, \"searchkick_synonym_graph\")\n          end\n        else\n          [:searchkick_search2, :searchkick_word_search].each do |analyzer|\n            unless settings[:analysis][:analyzer][analyzer].key?(:filter)\n              raise Error, \"Search synonyms are not supported yet for language\"\n            end\n\n            settings[:analysis][:analyzer][analyzer][:filter].insert(2, \"searchkick_synonym_graph\")\n          end\n        end\n      end\n    end\n\n    def set_deep_paging(settings)\n      if !settings.dig(:index, :max_result_window) && !settings[:\"index.max_result_window\"]\n        settings[:index] ||= {}\n        settings[:index][:max_result_window] = options[:max_result_window] || 1_000_000_000\n      end\n    end\n\n    def index_type\n      @index_type ||= begin\n        index_type = options[:_type]","sourceCodeStart":602,"sourceCodeEnd":638,"githubUrl":"https://github.com/ankane/searchkick/blob/93e901a75b11a25101668a616e006b158251b16e/lib/searchkick/index_options.rb#L602-L638","documentation":"Search-synonyms (`search_synonyms:`) are implemented by inserting a `searchkick_synonym_graph` filter into existing query analyzers (`searchkick_search2`, `searchkick_word_search`). For languages other than japanese/japanese2, those analyzers must already declare a `:filter` array in the settings; if the chosen `language:` produced analyzers without one, searchkick raises `Error` because there is nothing to insert the graph filter into. This happens at index build (reindex) time.","triggerScenarios":"`searchkick language: \"german\" (or italian, french, etc.), search_synonyms: [...]` followed by `Model.reindex`. Languages that use the prebuilt analyzer with filters are fine; the raise fires when `settings[:analysis][:analyzer][analyzer]` has no `:filter` key for `searchkick_search2` or `searchkick_word_search`.","commonSituations":"Enabling `search_synonyms` on a non-English/non-Japanese language index; upgrading searchkick and adding synonyms to an existing localized index; using `language:` values whose analyzer templates changed between searchkick versions.","solutions":["Test with plain `synonyms:` instead of `search_synonyms:` — plain synonyms use the index-time synonym filter and work for all languages.","Check the release notes / source for which languages support `search_synonyms` in your searchkick version and stick to those (english and japanese/japanese2 are the known-good paths).","Define custom analyzers with explicit `filter:` arrays via the `settings:` option so the graph filter can be inserted.","Drop the `language:` option (default analyzers have filters) if English-style analysis is acceptable for that index."],"exampleFix":"# before\nclass Product < ApplicationRecord\n  searchkick language: \"german\", search_synonyms: [[\"bett\", \"lager\"], [\"sofa\", \"couch\"]]\nend\nProduct.reindex # => Searchkick::Error: Search synonyms are not supported yet for language\n\n# after\nclass Product < ApplicationRecord\n  searchkick language: \"german\", synonyms: [[\"bett\", \"lager\"], [\"sofa\", \"couch\"]]\nend\nProduct.reindex","handlingStrategy":"validation","validationCode":"language = \"german\"\nsearch_synonyms = [[\"bett\", \"lager\"]]\nif search_synonyms && !%w[english japanese japanese2].include?(language.to_s)\n  Searchkick.warn \"search_synonyms unsupported for #{language}; falling back to index-time synonyms\"\n  search_synonyms = nil\nend\nclass Product < ApplicationRecord\n  searchkick language: language, synonyms: [[\"bett\", \"lager\"]]\nend","typeGuard":"def search_synonyms_supported?(language)\n  %w[english japanese japanese2].include?(language.to_s)\nend","tryCatchPattern":"begin\n  Product.reindex\nrescue Searchkick::Error => e\n  raise unless e.message.include?(\"Search synonyms are not supported\")\n  # fall back: drop search_synonyms, use index-time synonyms, then retry\n  Product.searchkick_index.delete\n  retry\nend","preventionTips":["Prefer plain `synonyms:` for non-English languages; it is analyzer-independent and always supported.","Run `Model.reindex` in a sandbox/staging cluster first whenever adding `search_synonyms` to a localized index.","Pin your searchkick version and read its index_options.rb for the exact supported-language list."],"tags":["searchkick","synonyms","language","analyzer","index-options"],"backgroundTag":"unsupported-feature-combination","analyzedSha":"93e901a75b11a25101668a616e006b158251b16e","analyzedAt":"2026-08-21T19:06:23.767Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}