2017-09-27 6 views
0

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" 
      } 
     }, 
     ........................................... 
     ........................................... 
     ........................................... 
     ] 
    } 
    } 
} 
+1

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

Répondre

1
POST test/_search 
{ 
    "query": { 
    "bool": { 
     "must_not": [ 
     { 
      "terms": { 
      "city": [ 
       "prague", 
       "london", 
       "chicago", 
       "singapore", 
       "new york", 
       "san francisco", 
       "mexico city", 
       "baghdad" 
      ] 
      } 
     } 
     ] 
    } 
    } 
}