2013-01-15 19 views
7

ElasticSearch kullanıyoruz ve boşluk içeren terimleri ararken bazı sorunlar yaşıyoruz. Somut bir örnek: JM Bruno adında bir kişi var, ama bunu ararken hiçbir sonuç geri dönülmez. Belirsiz bir terimi aramayı hatırlıyorum sonuca geri dönmüştüm ama şu anda bunu tekrarlayamıyorum.ElasticAralıklarla arama terimleri

Çok fazla şans olmadan, belirteç düzenleyicime "\" yanı sıra bir alan eklemeyi denedim. ES ayarları

module Search 
def self.included base 
base.send :include, Tire::Model::Search 
base.send :include, Tire::Model::Callbacks 

base.class_eval do 
    settings analysis: { 
       filter: { 
       ngram: { 
        type: 'nGram', 
        max_gram: 12, 
        min_gram: 3 
       }, 
       url_stop: { 
        type: "stop", 
        stopwords: %w[http https] 
       } 
       }, 
       tokenizer: { 
       url_email_tokenizer: { 
        pattern: '[^\w\-\[email protected]]+', 
        type: 'pattern' 
       } 
       }, 
       analyzer: { 
       url_analyzer: { 
        tokenizer: "url_email_tokenizer", 
        filter: %w[url_stop ngram], 
        type: "custom" 
       }, 
       name_analyzer: { 
        tokenizer: 'url_email_tokenizer', 
        filter: 'ngram', 
        type: 'custom' 
       } 
       } 
      } 


    end 
    end 
end 

Biz de alan adları ve e-posta adresleri aramak için bu tokenizers kullanmak (bir Ruby on Rails uygulamada Lastik mücevher kullanarak) şunlardır.

cevap

3

Tarlaya uyguladığınız analizörle _analyze API'u çalıştırmayı deneyin.

curl -XGET 'localhost:9200/_analyze?analyzer=name_analyzer' -d 'JM Bruno' 

Sen Elasticsearch jeton içine alan içeriğini nasıl değiştiğini görmek ve neden bir TermQuery kullanarak arama olamaz. Bir TermQuery analiz edilmez, bu yüzden sorgunuzu tam tersi indeksle karşılaştırır.

+0

çok serin 'analizörü bulamayan' bu bir göz atın kurulum gerekir. Analizörler söz konusu olduğunda, Lastik gemindeki ayarlar için kullandığımın farkında değil mi? – HannesFostie

+0

MyModel.index.analyze "Metnim", analyser deneyin: "name_analyzer" – karmi

+0

anladım indeksi eklemek gerekiyordu, ama yanıt benim için çok şey ifade etmiyor. Elbette, ngram tarafından simgelenmesini beklediğim gibi bir demet belirti bulur, ancak bu aramada neden bulunmadığını açıklamıyor (en azından bana açık değil) – HannesFostie

0

Aynı sorunla karşılaştım ve sadece tek şey "..." ile boşluk karakterini değiştirmek oldu. joker. Özellikle varsayılan sorgulayıcı gibi görünüyordu ben de özellikle sorgu dizisi aramada talep edildi bir göz ardı edildi.

İlgili konular