2014-07-09 4 views
5

ElasticSearch'te joker eşleşmeleri ve ngramları birleştirmek mümkün müdür? Zaten 3-11 uzunluktaki ngramları kullanıyorum.ElasticSearch'te ngramlarla joker karakterler nasıl kullanılır?

Çok küçük bir örnek olarak, C1239123 ve C123kayıtlarım var. Kullanıcı her ikisini de iade etmek istiyor. Bildikleri tek bilgi budur: C123? 12

Yukarıdaki örnek, tam 3 no'lu analizörümde çalışmaz, çünkü sorgu sonunda 3 eksik. Ben joker maçlar kutusunun dışında çalışacağım izlenim altındaydım, ama yukarıdaki gibi bir arama yaparsam anlamsızlaşırdım.

Sorgu:

.Search<ElasticSearchProject>(a => a 
    .Size(100) 
    .Query(q => q 
     .SimpleQueryString(query => query 
      .OnFieldsWithBoost(b => b 
       .Add(f => f.Summary, 2.1) 
       .Add(f => f.Summary.Suffix("ngram"), 2.0) 
      .Query(searchQuery)))); 

Analiz:

var projectPartialMatch = new CustomAnalyzer 
{ 
    Filter = new List<string> { "lowercase", "asciifolding" }, 
    Tokenizer = "ngramtokenizer" 
}; 

Simgeleştirici:

.Tokenizers(t=>t 
    .Add("ngramtokenizer", new NGramTokenizer 
    { 
     TokenChars = new[] {"letter","digit","punctuation"}, 
     MaxGram = 11, 
     MinGram = 3 
    })) 

DÜZENLEME: temel amacı kullanıcı tam olarak nerede arama motoru anlatmaya olanak sağlamaktır bilinmeyen karakterler. Bu maç sırasını korur. Sorguyu, yalnızca dizine eklenmiş alanları kullanmıyorum.

Daha fazla test sonucu ile EDIT 2: Önceki örneğimi biraz daha basitleştirdim. Anlamsız kelimeler noktalama filtrelerinden kaynaklanıyordu. Uygun bir örnekle anlamsızlık yoktur, ancak sonuçlar ilgili bir sırayla iade edilmez. Aşağıya baktığımda, ilk 2 sonuçların neden hiç eşleşmediğinden emin değilim. Ngram sorguya uygulanmaz. ?

c.a123 aranıyor 0,7 0 bu sırada sonuçlar verir: C.A1234.800

  • C.A1234.700 <

    • C.A1234.560
    • - Bu önce olmaz mıydı?
    • C.A1234.950
    • Buna bir çözüm arayan biri için
  • +0

    Bunu denediniz mi c123? 12 * '? ElasticSearch'te joker eşleşmeleri ve ngramları birleştirmek güzel ama nasıl çalıştığını anlamanız gerekiyor. Aksi halde, beklenmedik sonuçlara geri dönüyor –

    +0

    @ Duc.Duong Bunu denedim. Sonuç döndürüyor, ancak sorguyla ilgisi yok gibi görünüyor. – Brandon

    +0

    Eşleşen sonuçları gönderir misiniz? Daha fazla araştırabiliriz –

    cevap

    1

    , joker varsayılan olarak ngrammed jeton kullanılır. Sorunum, noktalama işaretleri içeren sorgularıma ve sorgumda standart bir çözümleyici kullanmamdan kaynaklanıyordu (noktalama işaretini bozuyor). DucDuong'un Inquisitor eklentisini kullanma önerisi, verilerin nasıl analiz edileceğini tam olarak göstermeye yardımcı oldu.