2013-03-10 62 views
0

这是我的轮胎设置:错误轮胎弹性的搜索,如果我写“:”冒号

def self.search(params) 
    tire.search(load: true, page: params[:page], per_page: 9) do 
     query do 
     boolean do 
      must { string params[:query], default_operator: "AND" } if params[:query].present? 
      must { range :published, lte: Time.zone.now } 
      must { term :post_type, params[:post_type] } if params[:post_type].present? 
     end 
     end 
     sort { by :created_at, "desc" } if params[:query].blank? 
     facet "posttypes" do 
     terms :post_type 
     end 
    end 
    end 

    settings :analysis => { 
     :filter => { 
     :ngram_filter => { 
      :type => "nGram", 
      :min_gram => 2, 
      :max_gram => 12 
     } 
     }, 
     :analyzer => { 
     :index_ngram_analyzer => { 
      :type => "custom", 
      :tokenizer => "standard", 
      :filter => ["lowercase", "ngram_filter"] 
     }, 
     :search_ngram_analyzer => { 
      :type => "custom", 
      :tokenizer => "standard", 
      :filter => ["standard", "lowercase", "ngram_filter"] 
     } 
     } 
    } do 
    mapping do 
     indexes :_id, index: :not_analyzed 
     indexes :tags, :analyzer => 'keyword' 
     indexes :published, type: 'date' 
     indexes :created_at, type: 'date' 
     [:title, :description, :post_type].each do |attribute| 
     indexes attribute, :type => 'string', :index_analyzer => 'index_ngram_analyzer', :search_analyzer => 'search_ngram_analyzer' 
     end 
    end 
    end 

    def to_indexed_json 
    { 
     _id: _id, 
     title: title, 
     description: description, 
     tags: tags, 
     post_type: post_type, 
     published: published, 
     created_at: created_at 
    }.to_json 
    end 

如果我只写一个冒号我得到这个错误:

500 : {"error":"SearchPhaseExecutionException[Failed to execute phase [query], total failure; shardFailures {[r7kpljHrRbOPzjngca91Uw][posts][3]: SearchParseException[[posts][3]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\"query\":{\"query_string\":{\"query\":\":\"}},\"filter\":{\"range\":{\"published\":{\"lte\":\"2013-03-09T12:51:43Z\"}}},\"size\":9}]]]; nested: QueryParsingException[[posts] Failed to parse query [:]]; nested: ParseException[Cannot parse ':': Encountered \" \":\" \": \"\" at line 1, column 0.\nWas expecting one of:\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n <QUOTED> ...\n <TERM> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n \"[\" ...\n \"{\" ...\n <NUMBER> ...\n <TERM> ...\n \"*\" ...\n ]; nested: ParseException[Encountered \" \":\" \": \"\" at line 1, column 0.\nWas expecting one of:\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n <QUOTED> ...\n <TERM> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n \"[\" ...\n \"{\" ...\n <NUMBER> ...\n <TERM> ...\n \"*\" ...\n ]; }{[r7kpljHrRbOPzjngca91Uw][posts][2]: SearchParseException[[posts][2]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\"query\":{\"query_string\":{\"query\":\":\"}},\"filter\":{\"range\":{\"published\":{\"lte\":\"2013-03-09T12:51:43Z\"}}},\"size\":9}]]]; nested: QueryParsingException[[posts] Failed to parse query [:]]; nested: ParseException[Cannot parse ':': Encountered \" \":\" \": \"\" at line 1, column 0.\nWas expecting one of:\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n <QUOTED> ...\n <TERM> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n \"[\" ...\n \"{\" ...\n <NUMBER> ...\n <TERM> ...\n \"*\" ...\n ]; nested: ParseException[Encountered \" \":\" \": \"\" at line 1, column 0.\nWas expecting one of:\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n <QUOTED> ...\n <TERM> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n \"[\" ...\n \"{\" ...\n <NUMBER> ...\n <TERM> ...\n \"*\" ...\n ]; }{[r7kpljHrRbOPzjngca91Uw][posts][4]: SearchParseException[[posts][4]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\"query\":{\"query_string\":{\"query\":\":\"}},\"filter\":{\"range\":{\"published\":{\"lte\":\"2013-03-09T12:51:43Z\"}}},\"size\":9}]]]; nested: QueryParsingException[[posts] Failed to parse query [:]]; nested: ParseException[Cannot parse ':': Encountered \" \":\" \": \"\" at line 1, column 0.\nWas expecting one of:\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n <QUOTED> ...\n <TERM> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n \"[\" ...\n \"{\" ...\n <NUMBER> ...\n <TERM> ...\n \"*\" ...\n ]; nested: ParseException[Encountered \" \":\" \": \"\" at line 1, column 0.\nWas expecting one of:\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n <QUOTED> ...\n <TERM> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n \"[\" ...\n \"{\" ...\n <NUMBER> ...\n <TERM> ...\n \"*\" ...\n ]; }]","status":500} 

如何解决这个问题?

我使用MongoDB的具有mongoid 3.x.x

谢谢!

回答

1

在Lucene的查询的特殊字符必须escaped

尝试查询\:而不是:

+0

我怎么能确保用户不输入搜索引擎里这个人物?谢谢 – hyperrjas 2013-03-10 14:31:40

+0

正则表达式验证器是一种选择。 – 2013-03-10 14:34:21

0

尝试将其转换为十六进制equivient逃脱字符