Я использую elasticsearch_autocomplete драгоценный камень для функции автозаполнения.шина и elasticsearch_autocomplete акценты и грани
У меня есть проблема со специальными символами ñ
и акцентами áéíóú
.
Модель:
class Car
ac_field :name, :description, :city, :skip_settings => true
def self.ac_search(params, options={})
tire.search load: true, page: params[:page], per_page: 9 do
query do
boolean do
must { string params[:query], default_operator: "AND" } if params[:query].present?
must { term :city, params[:city] } if params[:city].present?
end
end
filter :term, city: params[:city] if params[:city].present?
facet "city" do
terms :city
end
end
end
end
Эта версия отлично со специальными символами работает.
т.д .: Запрос с Martin
Я получаю все результаты с Martín, martín, martin, Martin
При таком подходе эта проблема:
Теперь какие результаты есть отдельные слова. например Город, отмеченный [«Сан-Франциско», «Мадрид»], будет иметь три отдельных тега. Аналогичным образом, если я делаю запрос на поиск по «san francisco» (должен {term «city», params [: city]}), это провалится, тогда как запрос на «San» или «Francisco» будет успешным. Желаемое поведение здесь заключается в том, что тег должен быть атомарным, поэтому только поиск в тегах «Сан-Франциско» (или «Мадрид») должен быть успешным.
Чтобы устранить эту проблему, я создаю свое собственное отображение:
model = self
settings ElasticsearchAutocomplete::Analyzers::AC_BASE do
mapping _source: {enabled: true, includes: %w(name description city)} do
indexes :name, model.ac_index_config(:name)
indexes :description, model.ac_index_config(:description)
indexes :city, :type => 'string', :index => :not_analyzed
end
end
С этим отображением проблема с многоканальными словами фиксирована, и теперь Гранями с city
поля работает отлично:
Вместо того, получение типа San
и Francisco
Теперь я получаю San Francisco
Теперь проблема в том, что при этом отображении внутри модели поиск не находит результатов со специальным символом ERS
.: например запрос с Martin
я получаю результаты только с Martin martin
Я использую Mongoid вместо активной записи.
Как исправить эту проблему? Я думаю, что проблема связана с asciifolding tokenfilter.
вы решить вашу проблему еще? вы подключаете тестовые слова в Ruby или это может быть проблема POST? –