Symboles dans la chaîne de requête pour elasticsearch

J'ai "documents" (activerecords) avec un attribut appelé les écarts. Les valeurs de l'attribut comme "Ben X" "Bin $" "Bin q" "Bin %" etc.

Je suis en train d'utiliser des pneus/elasticsearch à la recherche de l'attribut. Je suis à l'aide de l'espace de l'analyseur à l'indice de l'écart de l'attribut. Voici mon code pour la création de l'index:

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

La recherche semble bien fonctionner lorsque la chaîne de requête contient pas de caractères spéciaux. Par exemple Bin X retournera uniquement les enregistrements qui ont les mots Bin ET X. Toutefois, à la recherche de quelque chose comme Bin $ ou Bin % montre tous les résultats qui contiennent le mot Bin presque ignorant le symbole (résultats avec le symbole de la faire apparaître plus haut dans la recherche que les résultats sans).

Ici est la méthode de recherche que j'ai créé

def self.search(params)
    tire.search(load: true) do
      query { string "#{params[:term].downcase}:#{params[:query]}", default_operator: "AND" }
        size 1000
    end
end

et voici comment je construis le formulaire de recherche:

<div>
    <%= form_tag issues_path, :class=> "formtastic issue", method: :get do %>
        <fieldset class="inputs">
        <ol>
            <li class="string input medium search query optional stringish inline">
                <% opts = ["Description", "Detail","Deviation","Equipment","Recipe", "Step"] %>
                <%= select_tag :term, options_for_select(opts, params[:term]) %>
                <%= text_field_tag :query, params[:query] %>
                <%= submit_tag "Search", name: nil, class: "btn" %>
            </li>
        </ol>
        </fieldset>
    <% end %>
</div>

source d'informationauteur Arnob