web-dev-qa-db-fra.com

Récupérer les jetons analysés à partir des documents ElasticSearch

Essayer d'accéder au texte analysé/tokenisé dans mes documents ElasticSearch.

Je sais que vous pouvez utiliser Analyze API pour analyser du texte arbitraire selon vos modules d'analyse. J'ai donc pu copier et coller des données de mes documents dans l'API Analyze pour voir comment elles étaient symbolisées.

Cela semble cependant prendre beaucoup de temps. Existe-t-il un moyen de demander à ElasticSearch de renvoyer le texte symbolisé dans les résultats de recherche? J'ai parcouru les documents et je n'ai rien trouvé.

34
Clay Wardell

Jetez un œil à cette autre réponse: elasticsearch - Retourne les jetons d'un champ . Malheureusement, il nécessite de réanalyser à la volée le contenu de votre champ à l'aide du script fourni.
Il devrait être possible d'écrire un plugin pour exposer cette fonctionnalité. L'idée serait d'ajouter deux points de terminaison à:

  • permet de lire lucene TermsEnum comme le fait solr TermsComponent , utile aussi pour faire des suggestions automatiques. Notez que ce ne serait pas par document, juste chaque terme de l'index avec la fréquence du terme et la fréquence du document (potentiellement cher avec beaucoup de termes uniques)
  • permettent de lire le terme vecteurs s'il est activé, comme le fait solr TermVectorComponent . Ce serait par document mais nécessite de stocker le terme vecteurs (vous pouvez le configurer dans votre mappage) et permet également de récupérer des positions et des décalages s'il est activé.
15
javanna

Cette question est un peu ancienne, mais je pense peut-être qu'une réponse supplémentaire est nécessaire.

Avec ElasticSearch 1.0.0, Term Vector API a été ajouté, ce qui vous donne un accès direct aux magasins de jetons ElasticSearch sous le capot, par document. Les documents de l'API ne sont pas très clairs à ce sujet (uniquement mentionnés dans l'exemple), mais pour utiliser l'API, vous devez d'abord indiquer dans votre définition de mappage que vous souhaitez stocker les vecteurs de termes avec le term_vector propriété sur chaque champ.

16

Vous souhaiterez peut-être utiliser les scripts, mais votre serveur doit avoir les scripts activés.

curl 'http://localhost:9200/your_index/your_type/_search?pretty=true' -d '{
    "query" : {
        "match_all" : { }
    },
    "script_fields": {
        "terms" : {
            "script": "doc[field].values",
            "params": {
                "field": "field_x.field_y"
            }
        }
    }
}'

Le paramètre par défaut pour autoriser le script dépend de la version de recherche élastique, veuillez donc vérifier cela dans la documentation officielle.

5
tick_tack_techie