为了在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_unmapped
和ignore_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指数。
愚蠢的错误,但也许这将帮助其他人在这里结束。