2016-03-30 30 views
0

:ElasticSearch sorgu sorun

{ "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": {} } } 

indeksi ve doğrulanmış insert verilerine sonra. Bir otomatik tamamlama kelimeyi aramak isterken

bu sorunu olsun:

i aramak çalıştığınızda 'yeni' o (New York) eşleşmeleri kurar. ancak 'new y' den sonra bir boşluk ve ilk harf eklemeye çalışırsa, hiçbir şey bulunamadı. ve sonra 'yeni yo' dan sonra bir boşluk ve iki harf eklemeye çalışır.

Ana sorun, bir harfle bir kelimenin ardından ilk harfin neden eşleşmediğini anlamaktır?

örnek:

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 

kimse sorun ne olması gerektiği konusunda bir fikrin var mı? Bazı değerler aradığınızda

cevap

0


Elasticsearch endeksleme bir belge Analyzer (varsayılan bir veya özel bir) kullanıyor bu terimlerle belgeyi böler ve sonra arama yapmak istediğini ile eşleştirmeyi yapacaktır.
Örneğinizde: New York, varsayılan analizör ile analiz edilir ve dokümanınız 2 terim New York'a bölünür.
Yeni için arama yaptığınızda, size Yeni ilk terimini bulabilir, bu yüzden size New York yanıtını verecektir. New Y ile arama yaparsanız, aramayı 2 terime böler: Yeni, Y veya Yeni, Yo ve bu 2 terimle eşleşen belgeleri bulmaya çalışır. Karşılaştığınız problem, max_expansions parametresinden olabilir.
Buradan bir göz atın http://elasticsearch-users.115913.n3.nabble.com/How-exactly-works-quot-max-expansions-quot-in-match-phrase-prefix-query-td4030146.html Ayrıca analizörle ilgili. sonra hiçbir hit yok:

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

+0

Thx, Bu sorunu giderdi, ancak korumalı bir sonuç almak için öğe sayısı kadar büyük olan max_expansions olmalıdır? –

+0

eşleşme sorgusu ile karışıklık denediniz mi? https://www.elastic.co/guide/en/elasticsearch/guide/current/fuzzy-match-query.html – mariobyn

0

i böyle (New York execpted sonucu) için "ork" olarak kısmi kelimeyi sorgulamak istiyorsanız . Belgeselde kılavuz arıyordum ve bulabildiğim her şey, sorguyu joker karakterlerle değiştirmeme izin verecek. Ama sadece kısmi kelime ile arama yeteneği ile phrase_prefix kullanmak istiyorum. Bu mümkün mü?