2010-12-01 23 views
5

Bir MsSqlServer veritabanı tabloları, görünümleri ve saklı yordamları, Lucene.net ile dizin oluşturduğum bir dizin yapısına yazdım. Benim tablomun çoğu görünümü ve prosedür isimleri altçizgi içerir.Lucene.Net Belirtiler token bölünmesine neden oluyor

StandardAnalyzer kullanıyorum. Ben tIr_ InvoiceBtnWtn01 adında bir tablo için sorgu, örneğin, ben alma yerine sadece TIR _InvoiceBtnWtn01 için daha TIR ve InvoiceBtnWtn01 için geri vurur.

Sorunun tokenizer noktalama işareti olduğunu _ (alt çizgi) beri ayırdığını olduğunu düşünüyorum.

noktalama listeden alt çizgi kaldırmak için (basit) bir yolu var mı yoksa sql ve programlama dilleri için kullanıyor olmalıdır başka analizörü var mı?

+0

Şimdi StopAnalyzer ve WhitespaceAnalyzer çalışıyorum. Yani WhitespaceAnalyzer gitmek için yol gibi görünüyor. – automatic

cevap

4

Evet, StandardAnalyzer alt çizgide ayrılıyor. WhitespaceAnalyzer yok. Her alan için farklı analizörleri kullanmak üzere bir PerFieldAnalyzerWrapper'ı kullanabileceğinizi unutmayın - tablo/sütun adı dışındaki her şey için standart analizörün bazı işlevlerini saklamak isteyebilirsiniz.

WhitespaceAnalyzer, yalnızca boşlukları ayırıyor. Örneğin, belirteçleri küçültmez. Bu yüzden, WhitespaceTokenizer ve LowercaseFilter'ı birleştiren ya da LowercaseTokenizer'a bakan kendi analizörünüzü yapmak isteyebilirsiniz.

DÜZENLEME: Basit özel analizörü (C#, ancak oldukça kolay Java bunu çevirebilir):

// Chains together standard tokenizer, standard filter, and lowercase filter 
class MyAnalyzer : Analyzer 
{ 
    public override TokenStream TokenStream(string fieldName, System.IO.TextReader reader) 
    { 
     StandardTokenizer baseTokenizer = new StandardTokenizer(Lucene.Net.Util.Version.LUCENE_29, reader); 
     StandardFilter standardFilter = new StandardFilter(baseTokenizer); 
     LowerCaseFilter lcFilter = new LowerCaseFilter(standardFilter); 
     return lcFilter; 
    } 
} 
+1

Sanırım küçük boyutlu jetonlar istiyorum. Whitespace ve küçük harfleri bir araya getirmenin "kaynak olmayan bir derleme" yolu olmadığını varsayarım. LowercaseFilter ve lowercaseTokenizer kullanımı arasındaki fark nedir? – automatic

+0

@automatic: Zincir filtreler/belirtecin birlikte nasıl zincirleneceğine dair bir örnek ekledim. Genel olarak Solr, lucen'in "kullanımı kolay" versiyonu olması için tasarlandı, bu yüzden evet, sadece lucene kullanırsanız, kod yazma gerektirmeyen bir yöntem yoktur. Ama bu kasti niyettir. – Xodarap

+0

@automatic: Ayrıca, LowercaseTokenizer, LowercaseFilter + LetterTokenizer; LetterTokenizer'e bakmakla birlikte, altyazıda da bölünecek. Yani istediğin bu değil. Afedersiniz. – Xodarap

İlgili konular