想要在特定字段可用或不可用的所有索引中按字段排序,如果不可用则避免它

目前,根据评分获取结果,但我想做的是我想要一个基于评分 + 字段状态的结果,值为 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.

有人帮我忽略该字段不可用的索引或解决此问题的任何其他解决方案吗?


慕尼黑5688855
浏览 126回答 3
3回答

芜湖不芜

忘记删除旧的索引映射,只更新正在发生的数据。当您通过正确的设置遇到以下错误时,以下答案是相关的文本字段未针对需要每个文档字段数据的操作(如聚合和排序)进行优化,因此默认情况下禁用这些操作。请改用关键字字段。或者,在 [status] 上设置 fielddata=true 以通过反转倒排索引来加载字段数据。请注意,这可能会占用大量内存。在这种情况下,如果您想消除错误,请启用字段上的字段数据,但要注意它可能会导致性能问题。您可以在映射中的字段中启用它,order如图所示。{  "properties": {    "order": {       "type":     "text",      "fielddata": true    }  }} 

皈依舞

就我而言,我必须使用可聚合{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

为我工作curl&nbsp;-X&nbsp;PUT&nbsp;-H&nbsp;"Content-Type:&nbsp;application/json"&nbsp;\ &nbsp;&nbsp;&nbsp;&nbsp;-d&nbsp;'{"properties":&nbsp;{"format":&nbsp;{&nbsp;"type":"text","fielddata":&nbsp;true}}}'&nbsp;\ &nbsp;&nbsp;&nbsp;&nbsp;<your_host>:9200/<your_index>/_mapping
打开App,查看更多内容
随时随地看视频慕课网APP