目前,根据评分获取结果,但我想做的是我想要一个基于评分 + 字段状态的结果,值为 true/false。如果值为真,则需要导致优先级,但状态字段可能不存在于所有索引中。 "query" => [ 'bool' => [ 'filter' => $filter, 'must' => [ "multi_match" => [ 'query' => "$string", "type" => "cross_fields", 'fields' => ['field1','field2','field3'], "minimum_should_match" => "80%" ] ] ] ], "sort" => [ "_score", [ "status" => ["order" => "desc","unmapped_type" => "boolean"] ] ],但出现以下错误:[type] => illegal_argument_exception[reason] => Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [status] in order to load field data by uninverting the inverted index. Note that this can use significant memory.有人帮我忽略该字段不可用的索引或解决此问题的任何其他解决方案吗?
3 回答
芜湖不芜
TA贡献1796条经验 获得超7个赞
忘记删除旧的索引映射,只更新正在发生的数据。
当您通过正确的设置遇到以下错误时,以下答案是相关的
文本字段未针对需要每个文档字段数据的操作(如聚合和排序)进行优化,因此默认情况下禁用这些操作。请改用关键字字段。或者,在 [status] 上设置 fielddata=true 以通过反转倒排索引来加载字段数据。请注意,这可能会占用大量内存。
在这种情况下,如果您想消除错误,请启用字段上的字段数据,但要注意它可能会导致性能问题。
您可以在映射中的字段中启用它,order
如图所示。
{
"properties": {
"order": {
"type": "text",
"fielddata": true
}
}
}
皈依舞
TA贡献1851条经验 获得超3个赞
就我而言,我必须使用可聚合{fieldname}.keyword
字段。下面是一个使用 Nest .NET 的示例。
.Sort(s => s .Ascending(f => f.Field1.Suffix("keyword")) .Ascending(f => f.Field2.Suffix("keyword")) .Ascending(f => f.Field3.Suffix("keyword")))
大话西游666
TA贡献1817条经验 获得超14个赞
为我工作
curl -X PUT -H "Content-Type: application/json" \ -d '{"properties": {"format": { "type":"text","fielddata": true}}}' \ <your_host>:9200/<your_index>/_mapping
- 3 回答
- 0 关注
- 125 浏览
添加回答
举报
0/150
提交
取消