SearchParseException
如果发现某些文档不包含排序条件中使用的字段,Elasticsearch 会在解析查询时抛出一段时间。
SearchParseException:解析失败 [未找到 [price] 的映射以便排序]
我怎样才能成功地搜索这些文档,即使有些缺少该price
字段?
SearchParseException
如果发现某些文档不包含排序条件中使用的字段,Elasticsearch 会在解析查询时抛出一段时间。
SearchParseException:解析失败 [未找到 [price] 的映射以便排序]
我怎样才能成功地搜索这些文档,即使有些缺少该price
字段?
对于那些寻找两者示例的人
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" }
}
}
如果查询的任何索引没有价格映射,则 Elasticsearch 将处理它,就好像存在 long 类型的映射一样,该索引中的所有文档都没有该字段的值。
显然 ElasticSearch 不会对空值进行排序。我假设它会将 null 视为开始或结束(与 SQL 排序一样),但我相信它也会触发此错误。
因此,如果您看到此错误,您可能需要确保 sort 属性在发送到 ElasticSearch 时具有默认值。
Rails+ElasticSearch+Tire 出现此错误,因为排序列没有默认值,因此被作为空值发送到 ES。
此问题表明正在处理空值,但这不是我的经验。无论如何,这是值得一试的。
如果您使用的是 es 6.7
试试这个
sort : ["title.keyword:desc"]
我遇到了同样的问题(排序;会得到一些错误,但会得到一些结果),但在我的情况下,我的搜索是在根目录下发出的(没有指定索引),我得到的错误是因为搜索/订单也是寻找 Kibana 索引。
愚蠢的错误,但也许这会帮助到这里的其他人。
弹性搜索 6.4
只需指定索引,在 Kibana 中就可以了
前
GET /_search
{
"query": {
"exists": {
"field": "document_id"
}
},
"sort": [
{
"document_id": { "order": "asc" },
"created_at": { "order": "desc" }
}
]
}
后
GET /document-index/contact/_search (here)
{
"query": {
"exists": {
"field": "document_id"
}
},
"sort": [
{
"document_id": { "order": "asc" },
"created_at": { "order": "desc" }
}
]
}
如果原始答案对您不起作用,让我尝试提供帮助。对于ES 6.x,请尝试以下代码,不推荐使用 ignore_unmapped。
"sort" : [
{ "rating": {"order" : "desc" , "unmapped_type" : "long"} },
{ "price": {"order" : "asc" , "missing" : "_last" , "unmapped_type" : "long"} }
]
有关排序的更多信息,请访问:
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-request-sort.html
您还可以使用给您一些灵活性的脚本:
"sort" : {
"_script" : {
"type" : "number",
"script" : {
"lang": "painless",
"source": "return !doc['price'].empty ? doc['price'].value : 0"
},
"order" : "desc"
}
}
当我们使用下面的代码时,add_on是日期,会发生什么!分析属性文本,这意味着在存储时将其分解为不同的单词,并允许对字段中的一个或多个单词进行自由文本搜索
所以有“文本”和“关键字”与字段关联,所以如果我们需要在查询中使用聚合,我们需要字段值一般的关键字。
BEFORE
"_source":{....}
"query" : {...}
"sort": [
{
"added_on": {
"order": "desc"
}
}
]
AFTER
"_source":{....}
"query" : {...}
"sort": [
{
"added_on.keyword": {
"order": "desc"
}
}
]