ES:按日期排序字段需要启用fielddata

我正在尝试获取按 updated_at 字段排序的索引的所有匹配项。

然而,下面显示的错误信息说明了这一点: "{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Fielddata is disabled on text fields by default. Set fielddata=true on [updated_at] in order to load fielddata in memory by uninverting the inverted index.

这是我正在使用的映射:

Map::create($this->getModelType(), function (Blueprint $map) {
            $map->integer('id');
            $map->addField('text', 'title');
            $map->date('created_at')->format('yyyy-MM-dd HH:mm:ss');
            $map->date('updated_at')->format('yyyy-MM-dd HH:mm:ss');
            $map->date('deleted_at')->format('yyyy-MM-dd HH:mm:ss');
}));

这是获取所有通过 updated_at字段排序的数据的代码:

 $titleData = $this->title->search()->sortBy('updated_at', 'DESC');

有什么想法吗?

dpjjmo3079
dpjjmo3079 感谢您的建议,@gaurav9620!看看有什么可以改进的。
接近 2 年之前 回复
doukou1718
doukou1718 你做错了。如果显示此错误,则必须检查索引的映射。created_at,updated_at可能是文本字段
接近 2 年之前 回复
duanke6057
duanke6057 这是一个日期字段,但现在我的工作方式如下:$this->title->search()->sortBy('updated_at','DESC')->size(100)->get()->hits();
接近 2 年之前 回复
doulan6150
doulan6150 什么类型有updated_at字段?这是日期还是文字?
接近 2 年之前 回复

1个回答



似乎在 ElasticSearch </ code> index updated_at </ code>中存储为文字。 分析文本字段,通常 ElasticSearch </ code>无法按这些字段排序,因为默认情况下,在文本字段上禁用了fielddata 。</ p>

为了克服它,您可以创建映射关键字类型。 它可能如下所示:</ p>

 “updated_at”:{
“type”:“text”,//假设您最初将其作为文本
“”字段“: {
“original”:“keyword”,
“ignore_above”:64 //您可以跳过或更改它,ES应用默认值。

}
}
</ code> </ pre>

然后您应该使用映射进行排序。 您可以像这样访问它: updated_at.original </ code>。</ p>
</ div>

展开原文

原文

Seems like in ElasticSearch index updated_at is stored as text. Text fields are analyzed and normally ElasticSearch cannot sort by those fields, because fielddata is disabled on text fields by default.

In order to overcome it you can create mapping with keyword type. It might look like this:

"updated_at": {
  "type": "text", // assuming you originally have it as text
  "fields": {
    "original": "keyword",
    "ignore_above": 64 // You can skip or change it and ES applies default value. 
  }
}

And then you should use mapping for sorting. You can access it like this: updated_at.original.

doumaogui5937
doumaogui5937 因此,我正在使用的包中有一个错误,虽然它已将其声明为日期字段,但它并未对此进行处理。 添加fielddata = true属性解决了该问题。
接近 2 年之前 回复
doushang4274
doushang4274 谢谢,@ rrk。 请试一试,回到这个主题。
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问