这是完整的错误消息:
Searchkick :: InvalidQueryError:Searchkick :: InvalidQueryError:[400] {“error”:{“root_cause”:[{“type”:“illegal_argument_exception”,“reason”:“默认情况下,文本字段禁用Fielddata。设置fielddata =在[foo_name]上为true,以便通过反转索引来加载内存中的fielddata。请注意,这可以使用大量内存。“}],”type“:”search_phase_execution_exception“,”reason“:”所有分片都失败“,”相 “:” 查询”, “分组”:真 “failed_shards”:[{ “碎片”:0, “指数”: “foos_test”, “节点”: “k0yYkVnIQzaXbvpAG_rKgw”, “理由”:{ “类型”: “illegal_argument_exception”,“reason”:“默认情况下,在文本字段上禁用Fielddata。在[foo_name]上设置fielddata = true,以便通过反转索引来加载内存中的fielddata。但是请注意,这可能会占用大量内存。”} }],“caused_by”:{“type”:“illegal_argument_exception”,“reason”:“默认情况下,在文本字段上禁用Fielddata。在[foo_name]上设置fielddata = true,以便通过反转倒置来加载内存中的fielddata指数。请注意,这可能会占用大量内存。“}},”状态“: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。
这是一个讨厌的;我们很幸运能够找到解决方案。我假设你的模型看起来像这样:
class Foo
attr_accessor :foo_name
searchkick # some settings
def search_data
{ foo_name: foo_name }
end
end
您需要做的是定义一个foo_name_sort字段,其值与foo_name相同,但设置为filterable:
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}
)
试试这个
def index
query = params[:q].presence || "*"
@foos = Foo.search(
query,
page: params[:page], per_page: 25,
aggs: {foo_name: {order: {"_term" => "asc"}}}
)
end
像这样写下你的订单:
order: {'foo_name.keyword' => 'asc'}