10
votes

Comment prévenir les termes de la facette de la tokénisation

J'utilise les termes de la facette pour obtenir toutes les valeurs uniques et leur compte pour un champ. Et je reçois de mauvais résultats. xxx

Bien que le résultat réel doit être: xxx

voici ma requête d'échantillon: xxx


1 commentaires

Pourriez-vous mettre à jour la question avec un exemple short exemple des données et un exemple court exemple de la requête que vous faites, il est donc plus informatif pour les utilisateurs qui arrivent ici des recherches de Google, etc. ?


3 Réponses :


15
votes

Si réindexing est une option, il serait préférable de modifier la mappage et de marquer ces champs comme Not_Analyzed xxx pré>

Vous pouvez utiliser Type de champ multi-champ Si la version analysée du champ est souhaitée: p>

"facets" : {
  "term" : {
    "terms" : {
      "script_field" : "_source.your_field"
    }
  }
}


7 commentaires

J'ai essayé le script_field mais cela semblait produire une erreur. Ma requête actuelle ressemble à ceci: Pastebin.com/xwjmm7eq


Cela vous donne probablement une "propriété non résolue d'identifiant: logSource" erreur. C'est parce que le script élastiquearch ne sait pas ce que signifie "logsource". Essayez de le remplacer avec _fields.logsource


Apparaît comme "terme" "org.elasticsearch.search.lookup.fieldlookup@1209016"


Désolé, je voulais dire _field.logsource.value voir elasticsearch.org/guide/reference/ Modules / Scripting.html


Il s'avère que j'ai dû le ré-indexer avec l'index ":" Not_Analyzed ". Ça a fait l'affaire. Merci!


Ivan, super infos, ajout peut-être d'une courte info sur "Multifield" Le champ serait une vue d'ensemble de la solution des "Mes facettes sont cassées comment puis-je résoudre ce problème" problème?


Grande idée, Klement;) J'ai ajouté un exemple multifield à ma réponse.



-1
votes

J'ai brièvement expliqué ce problème et proposé deux solutions ici . J'ai parlé de multiples approches ici. On utilise NOT_Analyzed pour préserver la chaîne telle quelle. Mais ensuite, comme il a l'inconvénient d'être insensible à un cas insensible, une meilleure approche serait d'utiliser le mot-clé Tokenizer + Filtre minuscule


2 commentaires

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses uniquement des liaisons peuvent devenir invalides si la page liée change.


J'ai informé ma réponse.



0
votes

WOW, j'ai aussi reçu ce même problème aujourd'hui, tandis que terme agrégant dans la récente recherche élastique. Après google et une certaine compréhension partielle, a trouvé comment cette indexation geek fonctionne (qui est très simple).

Les requêtes ne peuvent trouver que des termes qui existent réellement dans l'index inversé fort> p>

quand Vous indexez la chaîne suivante p> xxx pré>

il sera transmis à un analyseur. L'analyseur pourrait l'incliner dans p> xxx pré>

avec ses détails de position. Et ces jetons peuvent filtrer à minuscule tels que p> xxx pré>

donc, après indexation, la requête de recherche peut voir le ci-dessus 4 uniquement. Pas le mot complet "web-misc / etc / passwd". Pour votre besoin, les suivantes sont mes options que vous pouvez utiliser P>

1.Change the Default Analyzer used by elasticsearch([link][1])
2.If it is not need, just TurnOff the analyzer by setting 'not_analyzed' for the fields you need
3.To convert the already indexed data searchable, re-indexing is the only option


0 commentaires