AttributeFactory
, Attribute
s kaynakları için AttributeImpl
s kaynağı oluşturur. Öznitelikler, StandardTokenizer
için veri akışını okuma/izleme için kullanılan temel mekanizma olan TokenStream
davranışını yönetir.
Küçük
AttributeFactory
göre 5.x 4.x değiştiğini
- siz belirtmeden yoksa her iki versiyonda da, daha sonra, AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY
İsterseniz bir AttributeFactory
ile StandardTokenizer
oluşturmak, ya da Sonunda kullanılmaya başlanacak.
büyük fark
da yapıcı bir parçası olarak giriş akışı için bir
Reader
içinde geçebileceği olmasıydı. Bu 4.x, sen sırayla
AttributeFactory
gelen özelliklerini yeniden başlatmak zorunda kalacak işlemek istediği her giriş akışı için yeni StreamTokenizer oluşturmak zorunda kalacak demektir.
Hiç Lucene dev değilim, ama benim tahminim bu çoklu akımların okuma karşısında niteliklerin yeniden kullanımını teşvik etmek için bir yeniden yapılanma sadece olmasıdır. Eğer TokenStream ve varsayılan AttributesFactory uygulanması dahili özelliklerine bir göz atacak olursak, oluşturma ve özelliklerini ayarlama ile ilgili yansıma LOT var. Sanırım olsaydı, bir okuyucu alır StreamTokenizer
yapıcı sadece bu niteliklerin başlatma nispeten pahalı olması nedeniyle simgeleştiricisine tekrar kullanılmasını ve bunun özelliklerini teşvik etmek çıkarıldı.
DÜZENLEME
uzun gecikmiş bir örnek ekleniyor - yönlendirmeyen için üzgün:
// Define your attribute factory (or use the default) - same between 4.x and 5.x
AttributeFactory factory = AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY;
// Create the tokenizer and prepare it for reading
// Lucene 4.x
StandardTokenizer tokenizer =
new StandardTokenizer(factory, new StringReader("Tokenize me!"));
tokenizer.reset();
// Lucene 5.x
StandardTokenizer tokenizer = new StandardTokenizer(factory);
tokenizer.setReader(new StringReader("Tokenizer me!"));
tokenizer.reset();
// Then process tokens - same between 4.x and 5.x
// NOTE: Here I'm adding a single expected attribute to handle string tokens,
// but you would probably want to do something more meaningful/elegant
CharTermAttribute attr = tokenizer.addAttribute(CharTermAttribute.class);
while(tokenizer.incrementToken()) {
// Grab the term
String term = attr.toString();
// Do something crazy...
}
sen denediniz singleton 'AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY' geçen? Ya da parametresiz kurucu kullanın? – sisve
Merhaba Simon ipuçları için teşekkürler. Bu kod ile çalışır: Tokenizer tokenStream = new StandardTokenizer(); tokenStream.setReader (yeni StringReader (giriş)); Filtrenizi uyguladığınızda bir TokenStream alırsınız. TokenStream iş akışı da artık) (reset çağırmanız gerekir değişti; Bu akıştan tüketmeye başlamadan önce. – samy
Bu soru cevaplandı mı? – soulcheck