2011-06-09 20 views
5

E-posta Gelen Kutusu'nda olduğu gibi, kullanıcıya gönderilen veriler için ücretsiz bir metin arama kutusu geliştirmek için Lucene kullanıyoruz. Kutunun tarihleri ​​işlemesine izin vermek istiyoruz, örneğin 5/1/2011. İşleri kolaylaştırmak için, sadece iki tarih biçimleri özelliğin güncel sürümünü sınırlandırıyor: Bizim prototip içinLucene ücretsiz metin arama sorgusunda bir tarih nasıl algılanır?

mm/dd/yy 
mm/dd/yyyy 

bu iki aramaya sorgu dizesi-sürecini önceden denemek için sorgu analiz sürecini kesmek tarih kalıpları. Bu yaklaşık 2 yıl önceydi ve biz Lucene 2.4'teydik. Bir DateFormat'ı kabul etmek ve belirtilen herhangi bir tarihle bir TokenStream döndürmek için Lucene'de herhangi bir araç olup olmadığını merak ediyorum. Lucene 2.9 için javadocs aracılığıyla bakınca, sınıf bulundu:

org.apache.lucene.analysis.sinks.DateRecognizerSinkFilter 

ihtiyacım olanı yapmak gibi görünüyor, ama bir SinkFilter, Lucene Wiki belgelendirilmesi görünmüyor bir konsept uygular. Bu filtreyi daha önce kullanmış olan var mı? Varsa, kullanmanın en etkili yolu nedir?

cevap

1

TeeSinkTokenFilter belgesine ilişkin bir örnek kod (yani, aşırı karmaşık olduğundan) vardır. DateRecognizerSinkFilter'ın tasarlanma şeklinin, gerçek tarihi saklamadığını unutmayın; Sadece bir belirtecin belirtilen biçime uyan bir tarih olduğunu algılar. DateRecognizerSinkFilter sınıfını bir dizi DateFormat örneğini almak, DateAttribute adlı yeni bir Öznitelik sınıfı oluşturmak (veya benzeri) oluşturmak ve tarih tanılaması alt sınıfını kullanmak için ayrıştırılan tarihi DateAttribute olarak ayarlamak için DateRecognizerSinkFilter sınıfını yeniden uygulamak gerekir. formatları eşleşiyor. Bu şekilde, DateAttribute'u sorgulayarak ve tarih biçimlerini bir sınıfa yerelleştirerek geçerli bir tarih olup olmadığını her zaman test edebilirsiniz. Bir başka avantaj da, birden fazla evyenin üstesinden gelmek zorunda kalmamanız, böylece kodun bağlantılı örnekden basitleştirilmesidir.

+0

Cevabınız için teşekkürler! Çözümünüzü bir deneyin ve sonuçlarımı göndereceğim. –

+0

Harika! Bunu, orijinal dizeyi ve tarihi aynı konumda yayınlayan normal bir satır içi belirteci olarak da uygulayabilirsiniz. Bu şekilde, örneğin, tarih biçiminiz ay veya tarih adlarına sahipse, doğrudan bunları da arayabilirsiniz. –

İlgili konular