0

私はrorとelasticsearchの初心者です。

私は私のモデルを持っています。

class Ddhcpconf < ActiveRecord::Base
    include Tire::Model::Search
    include Tire::Model::Callbacks


    tire.mapping do
        indexes :mac, :index_analyser => 'keyword', :search_analyser => 'keyword'
        indexes :ip, :index_analyser => 'keyword', :search_analyser => 'keyword'
    end 

    def self.search(params)
        tire.search(load: true, page: params[:page], per_page: 15) do |s|
            s.query { string params[:query], default_operator: "AND"} if    params[:query].present?
            s.sort { by :ip, "asc" } if params[:query].blank?
        end
    end
end

そして、私はこのエラーが発生するMACアドレスを検索したい:

400 : {"error":"SearchPhaseExecutionException[Failed to execute phase [query], all shards failed; shardFailures {[ekOgLtQNSSCtW0MgoPA6wQ][ddhcpconfs][2]: SearchParseException[[ddhcpconfs][2]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\"query\":{\"query_string\":{\"query\":\"00:14:22:47:41:9f\",\"default_operator\":\"AND\"}},\"size\":15}]]]; nested: QueryParsingException[[ddhcpconfs] Failed to parse query [00:14:22:47:41:9f]]; nested: ParseException[Cannot parse '00:14:22:47:41:9f': Encountered \" \":\" \": \"\" at line 1, column 5.\nWas expecting one of:\n <EOF> \n <AND> ...\n <OR> ...\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n \"^\" ...\n <QUOTED> ...\n <TERM> ...\n <FUZZY_SLOP> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n <REGEXPTERM> ...\n \"[\" ...\n \"{\" ...\n <NUMBER> ...\n ]; nested: ParseException[Encountered \" \":\" \": \"\" at line 1, column 5.\nWas expecting one of:\n <EOF> \n <AND> ...\n <OR> ...\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n \"^\" ...\n <QUOTED> ...\n <TERM> ...\n <FUZZY_SLOP> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n <REGEXPTERM> ...\n \"[\" ...\n \"{\" ...\n <NUMBER> ...\n ]; }{[ekOgLtQNSSCtW0MgoPA6wQ][ddhcpconfs][3]: SearchParseException[[ddhcpconfs][3]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\"query\":{\"query_string\":{\"query\":\"00:14:22:47:41:9f\",\"default_operator\":\"AND\"}},\"size\":15}]]]; nested: QueryParsingException[[ddhcpconfs] Failed to parse query [00:14:22:47:41:9f]]; nested: ParseException[Cannot parse '00:14:22:47:41:9f': Encountered \" \":\" \": \"\" at line 1, column 5.\nWas expecting one of:\n <EOF> \n <AND> ...\n <OR> ...\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n \"^\" ...\n <QUOTED> ...\n <TERM> ...\n <FUZZY_SLOP> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n <REGEXPTERM> ...\n \"[\" ...\n \"{\" ...\n <NUMBER> ...\n ]; nested: ParseException[Encountered \" \":\" \": \"\" at line 1, column 5.\nWas expecting one of:\n <EOF> \n <AND> ...\n <OR> ...\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n \"^\" ...\n <QUOTED> ...\n <TERM> ...\n <FUZZY_SLOP> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n <REGEXPTERM> ...\n \"[\" ...\n \"{\" ...\n <NUMBER> ...\n ]; }{[ekOgLtQNSSCtW0MgoPA6wQ][ddhcpconfs][4]: SearchParseException[[ddhcpconfs][4]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\"query\":{\"query_string\":{\"query\":\"00:14:22:47:41:9f\",\"default_operator\":\"AND\"}},\"size\":15}]]]; nested: QueryParsingException[[ddhcpconfs] Failed to parse query [00:14:22:47:41:9f]]; nested: ParseException[Cannot parse '00:14:22:47:41:9f': Encountered \" \":\" \": \"\" at line 1, column 5.\nWas expecting one of:\n <EOF> \n <AND> ...\n <OR> ...\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n \"^\" ...\n <QUOTED> ...\n <TERM> ...\n <FUZZY_SLOP> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n <REGEXPTERM> ...\n \"[\" ...\n \"{\" ...\n <NUMBER> ...\n ]; nested: ParseException[Encountered \" \":\" \": \"\" at line 1, column 5.\nWas expecting one of:\n <EOF> \n <AND> ...\n <OR> ...\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n \"^\" ...\n <QUOTED> ...\n <TERM> ...\n <FUZZY_SLOP> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n <REGEXPTERM> ...\n \"[\" ...\n \"{\" ...\n <NUMBER> ...\n ]; }{[ekOgLtQNSSCtW0MgoPA6wQ][ddhcpconfs][0]: SearchParseException[[ddhcpconfs][0]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\"query\":{\"query_string\":{\"query\":\"00:14:22:47:41:9f\",\"default_operator\":\"AND\"}},\"size\":15}]]]; nested: QueryParsingException[[ddhcpconfs] Failed to parse query [00:14:22:47:41:9f]]; nested: ParseException[Cannot parse '00:14:22:47:41:9f': Encountered \" \":\" \": \"\" at line 1, column 5.\nWas expecting one of:\n <EOF> \n <AND> ...\n <OR> ...\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n \"^\" ...\n <QUOTED> ...\n <TERM> ...\n <FUZZY_SLOP> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n <REGEXPTERM> ...\n \"[\" ...\n \"{\" ...\n <NUMBER> ...\n ]; nested: ParseException[Encountered \" \":\" \": \"\" at line 1, column 5.\nWas expecting one of:\n <EOF> \n <AND> ...\n <OR> ...\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n \"^\" ...\n <QUOTED> ...\n <TERM> ...\n <FUZZY_SLOP> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n <REGEXPTERM> ...\n \"[\" ...\n \"{\" ...\n <NUMBER> ...\n ]; }{[ekOgLtQNSSCtW0MgoPA6wQ][ddhcpconfs][1]: SearchParseException[[ddhcpconfs][1]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\"query\":{\"query_string\":{\"query\":\"00:14:22:47:41:9f\",\"default_operator\":\"AND\"}},\"size\":15}]]]; nested: QueryParsingException[[ddhcpconfs] Failed to parse query [00:14:22:47:41:9f]]; nested: ParseException[Cannot parse '00:14:22:47:41:9f': Encountered \" \":\" \": \"\" at line 1, column 5.\nWas expecting one of:\n <EOF> \n <AND> ...\n <OR> ...\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n \"^\" ...\n <QUOTED> ...\n <TERM> ...\n <FUZZY_SLOP> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n <REGEXPTERM> ...\n \"[\" ...\n \"{\" ...\n <NUMBER> ...\n ]; nested: ParseException[Encountered \" \":\" \": \"\" at line 1, column 5.\nWas expecting one of:\n <EOF> \n <AND> ...\n <OR> ...\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n \"^\" ...\n <QUOTED> ...\n <TERM> ...\n <FUZZY_SLOP> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n <REGEXPTERM> ...\n \"[\" ...\n \"{\" ...\n <NUMBER> ...\n ]; }]","status":400}

助けてください....

ありがとう

4

2 に答える 2

0

すべてのコロンを「\:」に置き換えてから、属性検索を使用する場合は最初のコロンを置き換えます。つまり、ip:172.30.5.85 です。

class Ddhcpconf < ActiveRecord::Base
    include Tire::Model::Search
    include Tire::Model::Callbacks


    tire.mapping do
        indexes :nomdns, :index_analyser => 'keyword', :search_analyser => 'keyword'
        indexes :ddns, :index_analyser => 'keyword', :search_analyser => 'keyword'
        indexes :comment, :index_analyser => 'keyword', :search_analyser => 'keyword'
        indexes :zonedhcp, :index_analyser => 'keyword', :search_analyser => 'keyword'
        indexes :mac, :index_analyser => 'keyword', :search_analyser => 'keyword'
        indexes :ip, :index_analyser => 'keyword', :search_analyser => 'keyword'
    end

    def self.search(params)
        if params[:query].present?
            if params[:query] =~ /^ip:/ || params[:query] =~ /^mac:/ || params[:query] =~ /^zonedhcp:/ || params[:query] =~ /^comment:/ || params[:query] =~ /^ddns:/ || params[:query] =~ /^nomdns:/
                recherche = params[:query].gsub(/:/, '\:')
                recherche = recherche.sub(/^([^:]+)\\:/, '\1:')
            else
                recherche = '"' + params[:query].gsub(/:/, '\:') + '"'
            end
        end
        tire.search(load: true, page: params[:page], per_page: 15) do |s|
            s.query { string params[:query], default_operator: "AND"} if params[:query].present?
            s.sort { by :ip, "asc" } if params[:query].blank? || params[:query].present?
        end
    end
end

ありがとう @geeky_sh

于 2013-11-07T16:54:54.183 に答える
0

特定の MAC アドレスを検索する場合は、term query を使用して結果を見つける必要があります。これは、term query がクエリ フィールド (この場合は MAC アドレス) を分析しないためです。エラスティックサーチ クエリは次のとおりです。

query: {
  term: {
    mac: '//your mac address..'
  }
}

タイヤクエリ:

def self.search(params)
  tire.search(load: true, page: params[:page], per_page: 15) do |s|
     s.query { term :mac, params[:query]} if params[:query].present?
  end
end

アップデート:

私はあなたの問題を私の側でチェックし、解決策を見つけました。あなたの場合の問題は、keyword_analyzerあなたのMACアドレスを設定していることです。代わりに、 を使用しkeywordます。それはうまくいくはずです。

検索に使用する用語を分析しないため、用語クエリを使用することをお勧めします。

keywordmac用のアナライザーを設定することによって注意してください。住所。mac全体を入力した場合のみ、ESドキュメントを検索できます。住所。

于 2013-11-05T16:13:06.920 に答える