2016-03-30 2 views
0

Après avoir créé mon index à la recherche élastique avec les réglages suivants par défaut:ElasticSearch ennuis de requête

{ "autosuggest_destination": { 
     "aliases": {}, 
     "mappings": { 
     "destination": { 
      "properties": { 
       "city": { 
        "type": "string" 
       }, 
       "country": { 
        "type": "string" 
       }, 
       "id": { 
        "type": "string" 
       }, 
       "state": { 
        "type": "string" 
       } 
      } 
     } 
     }, 
     "settings": { 
     "index": { 
      "creation_date": "1459329252404", 
      "number_of_shards": "1", 
      "number_of_replicas": "0", 
      "version": { 
       "created": "1070299" 
      }, 
      "uuid": "_1D7ZW0dQwy9kiKn0kKrLw" 
     } 
     }, 
     "warmers": {} } } 

après les données d'insertion à l'index et vérifié.

je reçois ce problème en essayant de rechercher un mot complet automatique:

lorsque je tente de rechercher « nouveau », il fonde matchs (New York). mais si i essaie d'ajouter un espace et une première lettre après 'new y', il ne trouve rien . et après il essaie d'ajouter un espace et deux lettres après 'new yo' cela fonctionne.

Le principal problème est de comprendre pourquoi la première lettre après un mot avec un espace ne correspond pas?

exemple:

GET autosuggest_destination/destination/_search { "query": { 
     "match": { 
      "city": { 
      "query": "new", 
      "type": "phrase_prefix" 
      } 

      } } 

    Result : New York 


    GET autosuggest_destination/destination/_search { "query": { 
     "match": { 
      "city": { 
      "query": "new y", 
      "type": "phrase_prefix" 
      } 

      } } 

    No Result 

    GET autosuggest_destination/destination/_search { "query": { 
     "match": { 
      "city": { 
      "query": "new yo", 
      "type": "phrase_prefix" 
      } 

      } } 

Result : New York 

Quelqu'un at-il une idée de ce que devrait être le problème?

Répondre

0


ElasticSearch à l'indexation d'un document utilise un analyseur (un par défaut ou par une autre) lorsque vous effectuez une recherche pour certaines valeurs, il divise le document en termes puis il fera la mise en correspondance avec ce que vous voulez rechercher.
Dans votre exemple: de New York est analysé avec l'analyseur par défaut a lieu et il va diviser votre document en 2 termes New, York.
Lorsque vous recherchez Nouveau vous trouverez le premier terme Nouveau, de sorte qu'il vous donnera la réponse New York. Si vous effectuez une recherche par New Y, la recherche sera divisée en deux termes: New, Y ou New, Yo et elle essaiera de trouver les documents correspondant à ces deux termes. Le problème que vous rencontrez peut provenir de max_expansions param.
Regardez ici http://elasticsearch-users.115913.n3.nabble.com/How-exactly-works-quot-max-expansions-quot-in-match-phrase-prefix-query-td4030146.html Également pour l'analyseur.

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html

+0

Thx, Il a résolu le problème mais les expansions_max devraient-elles être aussi grandes que les éléments comptent pour obtenir un résultat gardé? –

+0

avez-vous essayé la requête de correspondance avec le flou? https://www.elastic.co/guide/en/elasticsearch/guide/current/fuzzy-match-query.html – mariobyn

0

Si je voudrais interroger mot partiel tel que "ork" à (résultat execpted: New York) alors il n'y a malheureusement pas de résultats. Je cherchais un guide dans la documentation et tout ce que j'ai pu trouver c'est de changer la requête en un caractère générique qui me permettra de le faire. Mais je souhaite utiliser phrase_prefixe avec juste une possibilité de recherche par mot partiel aussi. Est-ce possible?