Символы в строке запроса для эластичного поиска
Я имею "документы» (активные записи) с атрибутом, называемым отклонениями. Атрибут имеет значения типа "Бин Х " "Bin $ " "Бин q " "Бин% " и т.п.
Я пытаюсь использовать шина /asticsearch для поиска атрибута. Я использую анализатор пробелов для индексации атрибута отклонения. Вот мой код для создания индексов:
settings :analysis => {
:filter => {
:ngram_filter => {
:type => "nGram",
:min_gram => 2,
:max_gram => 255
},
:deviation_filter => {
:type => "word_delimiter",
:type_table => ['$ => ALPHA']
}
},
:analyzer => {
:ngram_analyzer => {
:type => "custom",
:tokenizer => "standard",
:filter => ["lowercase", "ngram_filter"]
},
:deviation_analyzer => {
:type => "custom",
:tokenizer => "whitespace",
:filter => ["lowercase"]
}
}
} do
mapping do
indexes :id, :type => 'integer'
[:equipment, :step, :recipe, :details, :description].each do |attribute|
indexes attribute, :type => 'string', :analyzer => 'ngram_analyzer'
end
indexes :deviation, :analyzer => 'whitespace'
end
end
Похоже, что поиск работает нормально, когда строка запроса не содержит специальных символов. НапримерBin X
вернет только те записи, которые имеют словаBin
А ТАКЖЕX
в них. Тем не менее, в поисках чего-то вродеBin $
или жеBin %
показывает все результаты, которые имеют словоBin
почти игнорируя символ (результаты с символом отображаются выше при поиске без результатов).
Вот метод поиска, который я создал
def self.search(params)
tire.search(load: true) do
query { string "#{params[:term].downcase}:#{params[:query]}", default_operator: "AND" }
size 1000
end
end
и вот как я строю форму поиска:
"formtastic issue", method: :get do %>