Problème de recherche générique avec un type de données long dans elasticsearch
{
"from":0,
"query":{
"bool":{
"must":[
{
"query_string":{
"query":"10*",
"lenient":true,
"fields":[
"phoneNumber"
],
"escape":true
}
}
]
}
}
}
Ici, le numéro de téléphone est de type long et nous voulons y effectuer une recherche par caractères génériques. Je passe la requête sous la forme 10 * ( "query":"10*",
) Les hits réels auraient dû être 15 mais j'obtiens 0 hits.
Si je fais la même chose pour un champ avec l' adresse de mot-clé de type (chaîne) , avec la requête "query":"newyork*",
j'obtiens le résultat.
Quelqu'un a-t-il une idée de la raison pour laquelle nous n'avons pas obtenu les résultats pour les champs de type long?
Réponses
Il n'est pas directement possible d'exécuter des caractères génériques sur des types de données numériques. Il est préférable de convertir ces entiers en chaînes.
Ajout d'un exemple fonctionnel avec des données d'index, un mappage, une requête de recherche et un résultat de recherche
Mappage d'index:
{
"mappings": {
"properties": {
"phoneNumber": {
"type": "text"
}
}
}
}
Données d'index:
{
"phoneNumber": "101"
}
Requête de recherche:
{
"query": {
"bool": {
"filter": [
{
"query_string": {
"query": "10*",
"fields": [
"phoneNumber"
]
}
}
]
}
}
}
Résultat de la recherche:
"hits": [
{
"_index": "65109764",
"_type": "_doc",
"_id": "1",
"_score": 0.0,
"_source": {
"phoneNumber": "101"
}
}
]
Si vous voulez faire une correspondance partielle, vous pouvez même utiliser le tokenizer Edge n-gram