J'ai une requête elasticsearch
qui utilise beaucoup de clauses match
(environ 1300) car j'ai un très grand ensemble de données. ES renvoie une erreur en disant ceci:Elasticsearch éviter maxClauseCount en refactorisant les clauses de correspondance booléenne
"error": {
"root_cause": [
{
"type": "too_many_clauses",
"reason": "too_many_clauses: maxClauseCount is set to 1024"
}
],
"type": "search_phase_execution_exception",
"reason": "all shards failed",
"phase": "query",
"grouped": true,
}
Je l'ai fait quelques recherches en ligne et a constaté que ce n'est pas une bonne pratique pour augmenter la maxClauseCount
. Certains de elastic
mentionné que je devrais réécrire mes requêtes comme une requête terms
plutôt que bool
. Voici un exemple de ma requête. Comment est-ce que je le réécris pour que je ne frappe pas maxClauseCount
?
{
"query": {
"bool": {
"must_not": [
{
"match": {
"city": "dallas"
}
},
{
"match": {
"city": "london"
}
},
{
"match": {
"city": "singapore"
}
},
{
"match": {
"city": "prague"
}
},
{
"match": {
"city": "ontario"
}
},
...........................................
...........................................
...........................................
]
}
}
}
une requête de commutation de correspondance à terme (s) requête est correcte mais si votre recherche utilise les correspondances exactes, et non analysé les matchs (une requête à long terme est sensible à la casse, etc ...). Si tel est le cas, en effet, c'est un moyen facile de diminuer le nombre de clauses. – GPI