2017-02-10 22 views
1

以下是完整的錯誤消息:默認情況下,字段數據在文本字段中處於禁用狀態。設置fielddata =真

Searchkick::InvalidQueryError: Searchkick::InvalidQueryError: [400] {"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Fielddata is disabled on text fields by default. Set fielddata=true on [foo_name] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."}],"type":"search_phase_execution_exception","reason":"all shards failed","phase":"query","grouped":true,"failed_shards":[{"shard":0,"index":"foos_test","node":"k0yYkVnIQzaXbvpAG_rKgw","reason":{"type":"illegal_argument_exception","reason":"Fielddata is disabled on text fields by default. Set fielddata=true on [foo_name] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."}}],"caused_by":{"type":"illegal_argument_exception","reason":"Fielddata is disabled on text fields by default. Set fielddata=true on [foo_name] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."}},"status":400}

我得到這個錯誤(這個錯誤只顯示在MINITEST)當我添加索引操作代碼如下:

order: {foo_name: :asc} 

這裏是我的完整的索引代碼:

def index 
    query = params[:q].presence || "*" 
    @foos = Foo.search(
    query, 
    page: params[:page], per_page: 25, 
    order: {foo_name: :asc} 
    ) 
    end 
end 

我正在使用Searchkick。

回答

0

試試這個

def index 
    query = params[:q].presence || "*" 
    @foos = Foo.search(
    query, 
    page: params[:page], per_page: 25, 
    aggs: {foo_name: {order: {"_term" => "asc"}}} 
    ) 
end 
1

這是一個討厭的一個;我們幸運地遇到了解決方案。我假設你的模型看起來是這樣的:

class Foo 
    attr_accessor :foo_name 

    searchkick # some settings 

    def search_data 
    { foo_name: foo_name } 
    end 
end 

你需要做的是定義具有相同的值foo_name一個foo_name_sort場,但設置過濾:

class Foo 
    attr_accessor :foo_name 

    searchkick # some settings, 
      filterable [:foo_name_sort] 

    def search_data 
    { foo_name: foo_name, 
     foo_name_sort: foo_name } 
    end 
end 

然後搜索:

@foos = Foo.search(
    query, 
    page: params[:page], per_page: 25, 
    order: {foo_name_sort: :asc} 
) 
相關問題