2012-02-07 24 views
12

Moodod örneğimizde tam metin araması için elasticsearch kullanmaya yönelik bir strateji geliştirmeye çalışıyoruz. Filtre olarak kullanmak istediğimiz her anahtarın, elastik indeksine dahil edilmesi gerektiği görülecektir. Potansiyel olarak, mongo'daki her anahtarı bir filtre olarak kullanmak isteyebiliriz - yani açıklamanın tam metin araması, tarihe göre filtre ve telefon numarası. Kimsenin paylaşabileceği mongoya tam metin ekleme konusunda gerçek dünya deneyimleri var mı?mongodb fulltext arama stratejisi

Belki de elasticsearch'ü db olarak kullanabiliriz?

cevap

14

MongoDb ile birlikte ElasticSearch'ü kullanmak için herhangi bir neden görmüyorum, sadece aramanız gereken belgeler için ayrı bir belge deposu olarak ElasticSearch kullanın. Ve evet, bütün db olarak bile yapabilirsiniz. Elbette, alan modelinize ve diğer faktörlere bağlıdır.

Eğer zorlama, bulanık arama, karmaşık joker arama ihtiyacınız yoksa, mongoDb ile arama yapabilirsiniz. Yeni belge eklendiğinde, kelimeleri küçük harflere ayırın ve örneğin "kelimeler" dizisine ekleyin. Daha sonra bu diziye karşı regex ile arama talebi yapabilirsiniz. Bu regex'te I (ignore case) seçeneğini kullanamazsınız ve sadece LIKE% joker karakterini (veya joker olmadan) arayabilirsiniz, aksi halde arama mongoDb endeksini kullanmaz.

Bir seçenek daha - sen mongodb

Başka bir seçenek için river bulmak için deneyebilirsiniz - Java kullanıyorsanız Lucene kullanmaktır. Muhtemelen, Directory sınıfını, Lucene'nin dosya sistemi ya da RAM yerine MongoDb'de dizin depolayabilecek şekilde genişletebileceksiniz. Bu alanda herhangi bir araştırma yapmamıştım, ancak bunun olası olduğunu düşünüyorum.

+0

Teşekkür Ömer, sizin approcah bu bir seçenek olmakla birlikte, bir – stew

+0

denemek için gidiyoruz, verilerin ağırlık regex verimsiz bir seçim arar hale getirmek için yeterince büyük bir nokta geliyor. Bu aslında arama dizinleyicileri neden var. Pahalı arama işlemlerini veritabanından uzak tutma amacına yönelik olarak kalıcı depolamayı tamamlar ve artırırlar. –

+0

Regex mongodDb ile bile cevapta bahsettiğim gibi indeksleri kullanabilir, regex türüne bağlıdır – Anton

9

MongoDB'de tam metin aramasıyla deney yaptım. Dürüst olmak gerekirse, onun bir veritabanı ve bir arama motoru değil bu yüzden arama motoru parçası için sürekli depolama ve ElasticSearch için Mongo kullanırdım. Aslına bakarsanız, kalıcı depolama için Postgresql gibi bir şeye yapıştıracağım ve daha sonra arama motoruna aramak istediğiniz verileri iterim. http://gdal.org/ogr/drv_elasticsearch.html, verilerinizi bir RDBMS'den ElasticSearch'a hızlı bir şekilde dışa aktarmanıza olanak tanıyan bir sürücüdür. Verilerin, giriş kaynağına bağlanmanın bir yolu olduğu sürece GDAL kullanması için coğrafi verilerin olması gerekmemektedir.

Adam