Eu tenho um punhado de índices, alguns dos quais têm uma propriedade de data específica que indica quando foi publicado ( date_publish
) e outros não. Estou tentando aplicar uma gauss
função para diminuir a pontuação de documentos que foram publicados há muito tempo. Os índices relevantes estão configurados corretamente para reconhecer a date_publish
propriedade como uma data.
Eu configurei minha consulta da seguinte maneira, filtrando especificamente documentos que não têm a propriedade:
{
"index": "index_contains_prop,index_does_not_contains_prop",
"body": {
"query": {
"function_score": {
"score_mode": "avg",
"query": {
"match_all": {}
},
"functions": [
{
"script_score": {
"script": {
"source": "0"
}
}
},
{
"filter": {
"exists": {
"field": "date_publish"
}
},
"gauss": {
"date_publish": {
"origin": "now",
"scale": "728d",
"offset": "7d",
"decay": 0.5
}
}
}
]
}
},
"from": 0,
"size": 1000
}
}
No entanto, a consulta apresenta erros com o seguinte:
{
"error": {
"root_cause": [
{
"type": "parsing_exception",
"reason": "unknown field [date_publish]",
"line": 1,
"col": 0
}
],
"type": "search_phase_execution_exception",
"reason": "all shards failed",
"phase": "query",
"grouped": true,
"failed_shards": [
{
"shard": 0,
"index": "index_does_not_contains_prop",
"node": "1hfXZK4TT3-K288nIr0UWA",
"reason": {
"type": "parsing_exception",
"reason": "unknown field [date_publish]",
"line": 1,
"col": 0
}
}
]
},
"status": 400
}
Já fiz RTFM várias vezes e não consigo ver nenhuma discrepância - também tentei envolver a exists
condição em um bool:must
objeto, sem sucesso.
Eu entendi mal o propósito do filter
argumento?
A exists
consulta funcionará apenas em campos que fazem parte do mapeamento do índice. Ele retornará apenas documentos que tenham um valor para este campo, mas o próprio campo ainda precisa ser definido no mapeamento. É por isso que você está recebendo um erro - index_does_not_contains_prop
não foi date_publish
mapeado. Você pode usar a API put mapping para adicionar este campo aos índices que não o possuem (não mudará nenhum documento), e então sua consulta deve funcionar.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras