Symbole in Abfragezeichenfolge für die elastische Suche

Ich habe "Dokumente" (Activerecords) mit einem Attribut namens Abweichungen. Das Attribut hat Werte wie "Bin X" "Bin $0$quot; "Bin q" "Bin%" usw.

Ich versuche, das Attribut mit Hilfe von Reifen- / Gummisuche zu suchen. Ich verwende den Whitespace-Analyzer, um das Abweichungsattribut zu indizieren. Hier ist mein Code zum Erstellen der Indizes:

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

Die Suche scheint gut zu funktionieren, wenn die Abfragezeichenfolge keine Sonderzeichen enthält. Zum BeispielBin X gibt nur die Datensätze zurück, die die Wörter enthaltenBin UNDX in ihnen. Allerdings auf der Suche nach so etwas wieBin $ oderBin % Zeigt alle Ergebnisse an, die das Wort habenBin Das Symbol wird fast ignoriert (Ergebnisse mit dem Symbol werden in der Suche höher angezeigt, wenn das Ergebnis ohne angezeigt wird).

Hier ist die Suchmethode, die ich erstellt habe

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

Und so baue ich das Suchformular auf:

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage