SearchParseException
如果发现某些文档不包含排序条件中使用的字段,Elasticsearch会在分析时引发查询。
SearchParseException:解析失败[未找到[价格]的映射以进行排序]
即使缺少某些price
字段,如何才能成功搜索这些文档?
SearchParseException
如果发现某些文档不包含排序条件中使用的字段,Elasticsearch会在分析时引发查询。
SearchParseException:解析失败[未找到[价格]的映射以进行排序]
即使缺少某些price
字段,如何才能成功搜索这些文档?
Answers:
在深入研究之后,我找到了下面给出的解决方案。ignore_unmapped
应该true
在sort子句中显式设置为。
"sort" : [
{ "rating": {"order" : "desc" , "ignore_unmapped" : true} },
{ "price": {"order" : "asc" , "missing" : "_last" , "ignore_unmapped" : true} }
]
有关更多信息,请查看Elasticsearch参考:
"ignore_unmapped" : true
,它又开始工作了,但是奇怪的是,幕后发生了什么!谁知道!无论如何,现在就可以使用。+1
请注意,现在不建议使用“ 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 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" }
}
]
}
您还可以使用脚本,为您提供一些灵活性:
"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"
}
}
]