为了在ElasticSearch中进行sorting,没有find字段的映射

Elasticsearch在parsing查询的时候抛出一个SearchParseException ,如果在sorting条件中发现某些文档没有包含字段。

SearchParseException:parsing失败[未find[价格]的映射,以进行sorting]

我怎样才能成功地search这些文件,即使有些缺lessprice字段?

挖掘更多后,我发现解决scheme如下所示。 在sort子句中, ignore_unmapped应显式设置为true

 "sort" : [ { "rating": {"order" : "desc" , "ignore_unmapped" : true} }, { "price": {"order" : "asc" , "missing" : "_last" , "ignore_unmapped" : true} } ] 

对于那些寻找ignore_unmappedignore_unmapped的例子,请看这里的回复 。

请注意,“ignore_unmapped”现在已被弃用,以支持“unmapped_type”。 这是#7039的一部分

从文档:在1.4.0之前有ignore_unmapped布尔参数,这是没有足够的信息来决定发出的sorting值,并且不适用于跨索引search。 它仍然受支持,但鼓励用户迁移到新的unmapped_type。

默认情况下,如果没有与字段关联的映射,search请求将失败。 unmapped_type选项允许忽略没有映射的字段,而不是按照它们sorting。 此参数的值用于确定要发射的sorting值。 这是一个如何使用它的例子:

 { "sort" : [ { "price" : {"unmapped_type" : "long"} }, ], "query" : { "term" : { "user" : "kimchy" } } } 

如果被查询的任何索引都没有价格映射,那么Elasticsearch将会像处理longtypes的映射一样处理它,这个索引中的所有文档都没有该字段的值。

显然ElasticSearch不会对空值进行sorting。 我假设它将null视为在开始或结束(如同SQLsorting),但我相信它也触发这个错误。

所以如果你看到这个错误,你可能需要确保sort属性在发送到ElasticSearch时有一个默认值。

我有这个Rails + ElasticSearch +轮胎的错误,因为sorting列没有默认值,因此被发送到ES为空。

这个问题表明空值正在处理,但这不是我的经验。 无论如何,这是值得尝试的东西。

我遇到了同样的问题(sorta;会得到一些错误,但一些结果),但在我的情况下,我的search是在根(没有指定索引)发出,我得到的错误是因为search/订单也期待Kibana指数。

愚蠢的错误,但也许这将帮助其他人在这里结束。