J'ai un cas où une entité donne une taille de répertoire dans le cas où il est présent, sinon il donne une chaîne disant "IATEMPDIR n'existe pas".Comment vérifier la plage de numéros et si une valeur de chaîne dans Elasticsearch?
Est-il possible de déterminer si l'entité client.tempsize
lt 65594
& & valeur client.tempsize
est pas une chaîne (donc quand il a IATEMPDIR does not exist
valeur devrait également renvoyer cette requête). Dans ce cas, comment puis-je vérifier à la fois numéro de série ainsi que si une chaîne?
J'utilise percoler
PUT /eg/.percolator/1
{
"sort": {
"rule.step": { "order": "asc" }
},
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{
"match": {
"client.name": "Athena"
}
},
{
"range": {
"client.tempsize": {
"lt": 65594
}
}
}
]
}
}
}
},
"rule": {
"ruledesc": "Client should be Athena & tempsize should have sufficient space (eg: > 65594) and should not be a string",
"step": 1
}
}
mon doc
GET /eg/message/_percolate
{
"doc": {
"client": {
"name": "Athena",
"tempsize": "IATEMPDIR does not exist"
}
}
}
Au-dessus doc me donne ...MapperParsingException[failed to parse [client.tempsize]]; nested: NumberFormatException...
, mais quand je l'utilise "tempsize": 12
il Redonne bon résultat.
{
"took": 3,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"total": 1,
"matches": [
{
"_index": "eg",
"_id": "1"
}
]
}
Mise à jour
Après avoir traversé la réponse de ppearcy. J'ai changé le mappage
PUT /eg/message/_mapping
{
"properties": {
"client": {
"properties": {
"name": {
"type": "string"
},
"tempsize": {
"type": "long",
"ignore_malformed" : "true"
}
}
}
}
}
et ci-dessous doc ne donne pas lieu à ma requête, et est une chaîne ignorant
GET /eg/message/_percolate
{
"doc": {
"client": {
"name": "Athena",
"tempsize": "IATEMPDIR does not exist"
}
}
}
Donc, si je donne "tempsize": "65594"
, est-ce que considèrent les numéros à l'intérieur des guillemets doubles (comme donnant les nombres inférieurs à 65594 rendent ma requête)? Ou va-t-il casser quelque part?
Est-ce que cela veut dire, il ignore la valeur de chaîne et traite tout comme entier? Même "65594" est un nombre entier? – abi1964
Oui, mais cela dépend de la cartographie de votre terrain. Si vous ne définissez pas de mappage, elasticsearch devine en fonction des premières données qu'il voit. Ce comportement supposé est acceptable pour le piratage, mais il devrait définir des mappages explicites pour la plupart des cas d'utilisation. – ppearcy