que je veux faire une requête générique pour QNMZ-1900
ElasticSearch requête générique avec des traits d'union et filtre de minuscules
Comme je l'ai lu dans les documents, et avons essayé par moi-même, le tokenizer niveau de ElasticSearch sépare les mots sur les traits d'union, par exemple QNMZ-1900
sera divisé en QNMZ
et 1900
.
Pour éviter ce comportement, j'utilise la fonctionnalité not_analyzed
.
curl -XPUT 'localhost:9200/test-idx' -d '{
"mappings": {
"doc": {
"properties": {
"foo" : {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}'
je mets quelque chose dans mon index:
curl -XPUT 'localhost:9200/test-idx/doc/1' -d '{"foo": "QNMZ-1900"}'
Rafraîchissant il:
curl -XPOST 'localhost:9200/test-idx/_refresh'
Maintenant, je peux utiliser une requête générique et trouver QNMZ-1900
:
curl 'localhost:9200/test-idx/doc/_search?pretty=true' -d '{
"query": {
"wildcard" : { "foo" : "QNMZ-19*" }
}
Ma question:
Comment puis-je exécuter une requête générique avec un terme de recherche en minuscules?
J'ai essayé:
curl -XDELETE 'localhost:9200/test-idx'
curl -XPUT 'localhost:9200/test-idx' -d '{
"mappings": {
"doc": {
"properties": {
"foo" : {
"type": "string",
"index": "not_analyzed",
"filter": "lowercase"
}
}
}
}
}'
curl -XPUT 'localhost:9200/test-idx/doc/1' -d '{"foo": "QNMZ-1900"}'
curl -XPOST 'localhost:9200/test-idx/_refresh'
mais ma requête en minuscule:
curl 'localhost:9200/test-idx/doc/_search?pretty=true' -d '{
"query": {
"wildcard" : { "foo" : "qnmz-19*" }
}
}'
ne trouve rien.
Comment le réparer?
ne semble pas fonctionner pour POST test IDX/doc/_search { "requête": { "joker": { "foo": "QNMZ-19 *"}} } –
En effet, l'entrée de requête générique n'est pas analysée, mais de cette façon, la recherche peut toujours être effectuée sur la valeur en minuscule. Cependant, je mets à jour ma réponse. – ThomasC
@ThomasC cette réponse est-elle toujours valable pour ElasticSearch 6.1? Existe-t-il une fonctionnalité plus récente et plus pratique pour ce type de recherche? Que penses-tu des différents types de modélisation? Dans l'exemple, nous pourrions dupliquer "foo" dans le champ "foo_lowercase" dans json qui contiendrait "qnmz-1900". Et puis nous pourrions rechercher par curl 'localhost: 9200/test-idx/doc/_search? Pretty = true' -d '{"requête": {"wildcard": {"foo": "qnmz-19 *"} } Ou considérez-vous ce type de modélisation comme un anti-modèle pour la recherche élastique? –