2017-09-29 3 views
0

J'utilise le score de fonction suivante pour des tenues achetées:Elasticsearch function_score ne fonctionne pas?

{ 
"query": { 
    "function_score": { 
     "field_value_factor": { 
      "field": "purchased", 
      "factor": 1.2, 
      "modifier": "sqrt", 
      "missing": 1 
     } 
    } 
} 

}

Cependant, lorsque je crée une recherche - je reçois l'erreur suivante:

"type":"illegal_argument_exception","reason":"Fielddata is disabled on text fields by default. Set fielddata=true on [purchased] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead." 

La syntaxe est correct pour la recherche car je l'ai exécuté localement et cela fonctionne parfaitement. Je l'exécute maintenant sur mon serveur et ce n'est pas fonctionné. Ai-je besoin de définir acheté comme un nombre entier ou est-ce dû à autre chose?

Répondre

0

Le champ purchased est un champ de chaîne analysé, d'où l'erreur que vous voyez.

Lorsque l'indexation de vos documents, assurez-vous que les chiffres ne sont pas entre guillemets, à savoir

Wrong: 
{ 
    "purchased": "324" 
} 

Right: 
{ 
    "purchased": 324 
} 

... ou si vous ne pouvez pas modifier les documents sources (parce que vous n'êtes pas responsable de la production eux), assurez-vous que vous créez un mappage qui définit le champ purchased comme étant un champ entier.

{ 
    "your_type": { 
     "properties": { 
      "purchased": { 
       "type": "integer" 
      } 
     } 
    } 
} 
+0

Une chance avec cela? – Val