Símbolos en cadena de consulta para elasticsearch

Tengo "documentos" (activerecords) con un atributo llamado desviaciones. El atributo tiene valores como "Bin X" "Bin $0$quot; "Bin q" "Bin%" etc.

Estoy tratando de usar tire / elasticsearch para buscar el atributo. Estoy usando el analizador de espacios en blanco para indexar el atributo de desviación. Aquí está mi código para crear los índices:

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 búsqueda parece funcionar bien cuando la cadena de consulta no contiene caracteres especiales. Por ejemploBin X devolverá solo aquellos registros que tengan las palabrasBin YX en ellos. Sin embargo, buscando algo comoBin $ oBin % muestra todos los resultados que tienen la palabraBin casi ignorando el símbolo (los resultados con el símbolo aparecen más arriba en la búsqueda que resulta sin).

Aquí está el método de búsqueda que he creado.

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

Y aquí es cómo estoy construyendo el formulario de búsqueda:

<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>

Respuestas a la pregunta(1)

Su respuesta a la pregunta