2016-08-22 2 views
1

Je suis novice à ELasticsearch et aurais besoin de votre aide concernant ES retournant des résultats inégalés pour le champ analysé. j'ai un analyseur personnalisé comme suit:Elasticsearch renvoie des résultats inégalés

"analyzer": { 
      "testing_analyzer": { 
       "type": "custom", 
       "char_filter": "html_strip", 
       "tokenizer": "standard", 
       "filter": [ 
        "lowercase", 
        "asciifolding", 
        "snowball", 
        "stop" 
       ] 
      }, 
      "testing_search_analyzer": { 
       "type": "custom", 
       "char_filter": "html_strip", 
       "tokenizer": "standard", 
       "filter": [ 
        "lowercase", 
        "asciifolding" 
       ] 
      } 
     } 

j'ai mis cet analyseur pour un champ à la fois l'indice & recherche comme suit.

"name": 
{ 
"type": "string", 
"analyzer": "testing_analyzer", 
"search_analyzer": "testing_search_analyzer" 
} 

mais quand la recherche pour le nom "Università di Bologna", il retourne premier enregistrement de résultat ont même match, mais certains autres documents correspondent pas (2ème disque dans le résultat ci-dessous):

Record1:

[ "Università di Bologna", "University of Bologna", "CNR", "Università di Pisa", "University of Pisa", "Mineraria e Delle Tecnologie Ambientali" ] 

Record2:

[ "University of Salerno", "Università di Salerno" ] 

requête:

{ 
    "fields": [ 
     "doc_id", 
     "name" 
    ], 
    "query": { 
     "match": { 
     "name": "Università di bologna" 
     } 
    } 
} 

toute aide?!

+0

comment est défini 'testing_search_analyzer'? – keety

+0

"testing_search_analyzer": { "type": "sur mesure", "char_filter": "html_strip", "tokenizer": "standard", "filtre": [ "minuscule", "asciifolding"] } , – Telebh

+0

pouvez-vous afficher la requête aussi? – keety

Répondre

1

Les résultats sont comme prévu. Par défaut, la requête de correspondance fait un 'OU' des jetons générés par tokenizer.

Essayez de changer la requête suivante:

{ 
    "fields": [ 
     "doc_id", 
     "name" 
    ], 
    "query": { 
     "match": { 
     "name": { 
      "query": "Università di bologna", 
      "operator": "and" 
     } 
     } 
    } 
} 
+0

il a travaillé après avoir ajouté" et "opérateur comme indiqué !!! Merci beaucoup. BTW pourquoi sans ajouter "et" opérateur certains enregistrements qui n'ont pas le terme de recherche exact ont eu un score plus élevé que ceux avec une correspondance exacte? – Telebh

+0

essayez d'activer [expliquer] (https://www.elastic.co/guide/en/elasticsearch/reference/current/search-explain.html) il peut indiquer pourquoi cela pourrait se produire – keety

+0

aussi si la réponse était helpfu faire upvote et accepter merci :) – keety