2016-09-23 1 views
0

J'essaie de créer un analyseur qui remplace un caractère spécial par un espace blanc et le convertit en majuscules. puis après, si je veux chercher en minuscules aussi, cela devrait marcher.Analyseur de mappage elasticsearch - Obtenir un résultat sans résultat

Analyzer Mapping:

[email protected]:~/Downloads/elasticsearch-2.4.0/bin$ curl -XPUT 'http://localhost:9200/aida' -d '{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "my_analyzer": { 
      "tokenizer": "standard", 
      "char_filter": [ 
      "my_char_filter" 
      ], 
      "filter": [ 
      "uppercase" 
      ] 
     } 
     }, 
     "char_filter": { 
     "my_char_filter": { 
      "type": "pattern_replace", 
      "pattern": "(\\d+)-(?=\\d)", 
      "replacement": "$1 " 
     } 
     } 
    } 
    } 
} 
' 
{"acknowledged":true} 


[email protected]:~/Downloads/elasticsearch-2.4.0/bin$ curl -XPOST 'http://localhost:9200/aida/_analyze?pretty' -d '{ 
"analyzer":"my_analyzer", 
"text":"My name is Soun*arya?jwnne&yuuk" 
}' 

Il est tokenizing les mots correctement en remplaçant le caractère spécial avec les espaces. Maintenant, si je recherche un mot dans le texte, il ne me récupère aucun résultat.

[email protected]:~/Downloads/elasticsearch-2.4.0/bin$ curl -XGET 'http://localhost:9200/aida/_search' -d '{ 
"query":{ 
"match":{ 
"text":"My" 
} 
} 
}' 

Je n'obtiens aucun résultat de la requête GET ci-dessus. Obtenir le résultat comme:

[email protected]:~/Downloads/elasticsearch-2.4.0/bin$ curl -XGET 'http://localhost:9200/aida/_search' -d '{ 
"query":{ 
"match":{ 
"text":"my" 
} 
} 
}' 
{"took":5,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":0,"max_score":null,"hits":[]}} 

Quelqu'un peut-il m'aider avec ceci! Je vous remercie!

+0

Question muette, mais avez-vous indexé des données après la création de votre index? L'appel à '_analyze' n'indexera rien, mais montrera simplement comment le texte sera analysé. Je pense que c'est le même problème que dans votre [autre question] (http://stackoverflow.com/questions/39643533/custom-analyzer-which-breaks-the-tokens-on-special-characters-and-lowercase-uppe) – Val

+0

oui, c'est le même problème. pourriez-vous s'il vous plaît dites-moi comment je pourrais résoudre ce problème –

Répondre

1

Vous ne semblez avoir indexé aucune donnée après la création de votre index. L'appel à _analyze n'indexera rien mais vous montrera simplement comment le contenu que vous envoyez à ES sera analysé.

Tout d'abord, vous devez créer votre index en spécifiant un mappage dans lequel vous utilisez l'analyseur que vous avez défini:

curl -XPUT 'http://localhost:9200/aida' -d '{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "my_analyzer": { 
      "tokenizer": "standard", 
      "char_filter": [ 
      "my_char_filter" 
      ], 
      "filter": [ 
      "uppercase" 
      ] 
     } 
     }, 
     "char_filter": { 
     "my_char_filter": { 
      "type": "pattern_replace", 
      "pattern": "(\\d+)-(?=\\d)", 
      "replacement": "$1 " 
     } 
     } 
    } 
    }, 
    "mappings": {      <--- add a mapping type... 
    "doc": { 
     "properties": { 
     "text": {      <--- ...with a field... 
      "type": "string", 
      "analyzer": "my_analyzer" <--- ...using your analyzer 
     } 
     } 
    } 
    } 
}' 

Ensuite, vous pouvez indexer un nouveau document réel:

curl -XPOST 'http://localhost:9200/aida/doc' -d '{ 
    "text": "My name is Soun*arya?jwnne&yuuk" 
}' 

Enfin, vous pouvez rechercher:

curl -XGET 'http://localhost:9200/aida/_search' -d '{ 
    "query":{ 
    "match":{ 
     "text":"My" 
    } 
    } 
}' 
+0

Awesome. Ça fonctionne maintenant. Mais ayez une petite question - c'est l'indexation parfaite et la recherche me récupère des résultats aussi bien. Si je recherche, par exemple un nom dans le champ de texte - je reçois toujours le résultat avec les caractères spéciaux seulement. Je ne suis pas en mesure de récupérer le résultat qui a été fait dans la deuxième étape (le résultat après l'indexation du document) –

+0

Le document source ne sera jamais modifié par ES, le texte sera analysé, tokenized et indexé, mais le document retourné sera contient toujours exactement le même contenu que celui que vous avez indexé. – Val

+0

Génial, heureux que cela a aidé! – Val