没有为字段找到映射以便在ElasticSearch中进行排序

Yad*_*adu 103 sorting mapping elasticsearch

SearchParseException如果发现某些文档不包含排序条件中使用的字段,则Elasticsearch会抛出一段时间解析查询.

SearchParseException:Parse Failure [找不到[price]的映射以便排序]

我怎样才能成功搜索这些文件,即使有些人遗漏了这些文件price

Yad*_*adu 105

在挖掘更多之后,我找到了解决方案,如下所示.ignore_unmapped应该true在sort子句中显式设置.

"sort" : [
       { "rating": {"order" : "desc" , "ignore_unmapped" : true} },
       { "price": {"order" : "asc" , "missing" : "_last" , "ignore_unmapped" : true} }
]
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看Elasticsearch参考资料:

  • 看起来新策略是使用[unmapped_type](https://www.elastic.co/guide/en/elasticsearch/reference/1.x/search-request-sort.html#_ignoring_unmapped_fields) (6认同)
  • 直到今天,我的查询一直有效,而无需更新任何库等。但是今天,我开始遇到此相同的错误。我现在添加了““ ignore_unmapped”:true`,它再次开始工作,但是奇怪的是,幕后发生了什么!谁知道!无论如何,现在就可以使用。+1 (2认同)
  • 有人可以澄清“缺失”和“未映射”之间的区别吗?对于某个字段,如果某些文档有而其他文档没有,则该字段是否被视为“缺失”或“未映射”?“缺失”是否意味着该字段在文档中但对应的值为空? (2认同)

小智 39

对于那些寻找两者的例子的人ignore_unmapped, unmapped_type在此处查看我的回复.

请注意,"ignore_unmapped"现在已弃用,取而代之的是"unmapped_type".这是作为#7039的一部分完成的

从文档: 1.4.0之前有一个ignore_unmapped布尔参数,它不足以决定要发出的排序值,并且不适用于跨索引搜索.它仍然受支持,但鼓励用户迁移到新的unmapped_type.

默认情况下,如果没有与字段关联的映射,搜索请求将失败.unmapped_type选项允许忽略没有映射但不按其排序的字段.此参数的值用于确定要发出的排序值.以下是如何使用它的示例:

{
    "sort" : [
        { "price" : {"unmapped_type" : "long"} },
    ],
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果查询的任何索引没有价格映射,那么Elasticsearch将处理它,好像存在long类型的映射,此索引中的所有文档都没有该字段的值.


小智 6

如果你使用的是 es 6.7

试试这个

sort : ["title.keyword:desc"]
Run Code Online (Sandbox Code Playgroud)