Ruby on rails 默认情况下,文本字段上禁用Fielddata。设置fielddata=true
以下是完整的错误消息: Searchkick::InvalidQueryError:Searchkick::InvalidQueryError: [400] {“错误”:{“根本原因”:[{“类型”:“非法参数”\u异常”,“原因”:“字段数据” 默认情况下,在文本字段上禁用。在 [foo_name]通过取消转换将fielddata加载到内存中 倒排索引。注意,这可以使用 内存“}],“类型”:“搜索\阶段\执行\异常”,“原因”:“全部” 碎片 失败”,“阶段”:“查询”,“分组”:true,“失败的_碎片”:[{“碎片”:0,“索引”:“foos_测试”,“节点”:“k0yyykvniqzaxbvpag_rKgw”,“原因”:{“类型”:“非法参数_异常”,“原因”:“字段数据” 默认情况下,在文本字段上禁用。在 [foo_name]通过取消转换将fielddata加载到内存中 倒排索引。注意,这可以使用 内存“}}],“原因”:{“类型”:“非法参数”\u异常”,“原因”:“字段数据” 默认情况下,在文本字段上禁用。在 [foo_name]通过取消转换将fielddata加载到内存中 倒排索引。注意,这可以使用 内存“}}”,状态:400} 当我在索引操作中添加以下代码时,出现此错误(此错误仅在minitest中显示):Ruby on rails 默认情况下,文本字段上禁用Fielddata。设置fielddata=true,ruby-on-rails,
elasticsearch,searchkick,Ruby On Rails,
elasticsearch,Searchkick,以下是完整的错误消息: Searchkick::InvalidQueryError:Searchkick::InvalidQueryError: [400] {“错误”:{“根本原因”:[{“类型”:“非法参数”\u异常”,“原因”:“字段数据” 默认情况下,在文本字段上禁用。在 [foo_name]通过取消转换将fielddata加载到内存中 倒排索引。注意,这可以使用 内存“}],“类型”:“搜索\阶段\执行\异常”,“原因”:“全部” 碎片 失败”,“阶段”:“查询”,“分组”:true,
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。试试这个
def index
query = params[:q].presence || "*"
@foos = Foo.search(
query,
page: params[:page], per_page: 25,
aggs: {foo_name: {order: {"_term" => "asc"}}}
)
end
这是一个令人讨厌的问题;我们幸运地偶然找到了解决办法。我假设您的模型如下所示:
class Foo
attr_accessor :foo_name
searchkick # some settings
def search_data
{ foo_name: foo_name }
end
end
order: {'foo_name.keyword' => 'asc'}
您需要做的是定义一个foo_name_排序字段,该字段的值与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}
)
按以下方式书写您的订单:
class Foo
attr_accessor :foo_name
searchkick # some settings
def search_data
{ foo_name: foo_name }
end
end
order: {'foo_name.keyword' => 'asc'}