GNU/Linux >> Belajar Linux >  >> Linux

Cara mempercepat pencarian pada banyak koleksi file teks (1TB)

Sudah ada banyak jawaban, saya hanya ingin menambahkan dua sen saya:

  1. Memiliki data sebesar ini (1 TB) dengan hanya 8 GB memori tidak akan cukup baik untuk pendekatan apa pun, baik itu menggunakan Lucene atau Elasticsearch (secara internal menggunakan Lucene) atau beberapa perintah grep jika Anda ingin pencarian lebih cepat, alasannya sangat sederhana semua sistem ini menyimpan data dalam memori tercepat untuk dapat melayani lebih cepat dan dari 8 GB (25% Anda harus memesan untuk OS dan 25-50% lainnya setidaknya untuk aplikasi lain), Anda tertinggal dengan sangat beberapa GB RAM.
  2. Memperbarui SSD, menambah RAM pada sistem Anda akan membantu, tetapi ini cukup merepotkan dan sekali lagi jika Anda mengalami masalah kinerja, akan sulit untuk melakukan penskalaan vertikal pada sistem Anda.

Saran

  1. Saya tahu Anda telah menyebutkan bahwa Anda ingin melakukan ini pada sistem Anda, tetapi seperti yang saya katakan itu tidak akan memberikan manfaat nyata dan Anda mungkin akan membuang begitu banyak waktu(infra dan kode-bijaksana(begitu banyak pendekatan seperti yang disebutkan dalam berbagai jawaban)), maka saya sarankan Anda melakukan pendekatan top-down seperti yang disebutkan dalam jawaban saya yang lain untuk menentukan kapasitas yang tepat. Ini akan membantu Anda mengidentifikasi kapasitas yang benar dengan cepat dari pendekatan apa pun yang Anda pilih.
  2. Mengenai penerapannya, saya menyarankan untuk melakukannya dengan Elasticsearch(ES), karena sangat mudah untuk mengatur dan menskalakan, Anda bahkan dapat menggunakan AWS Elasticsearch yang juga tersedia dalam tingkat gratis dan nanti dalam skala cepat, meskipun saya saya bukan penggemar berat AWS ES, ini menghemat banyak waktu penyiapan dan Anda dapat memulai dengan cepat jika Anda sangat mengenal ES.

  3. Untuk membuat pencarian lebih cepat, Anda dapat membagi file menjadi beberapa bidang (judul, isi, tag, penulis, dll.) dan hanya mengindeks bidang yang penting, yang akan mengurangi ukuran indeks terbalik dan jika Anda hanya mencari pencocokan string yang tepat ( tidak ada pencarian sebagian atau teks lengkap), maka Anda cukup menggunakan keyword bidang yang bahkan lebih cepat untuk diindeks dan dicari.

  4. Saya dapat melanjutkan tentang mengapa Elasticsearch bagus dan cara mengoptimalkannya, tetapi bukan itu intinya dan Intinya adalah bahwa pencarian apa pun akan membutuhkan sejumlah besar memori, CPU, dan disk dan salah satu yang menjadi penghambat akan menghambat pencarian sistem lokal Anda dan aplikasi lain, karenanya menyarankan Anda untuk benar-benar mempertimbangkan untuk melakukan ini pada sistem eksternal dan Elasticsearch sangat menonjol sebagai artinya untuk sistem terdistribusi dan sistem pencarian sumber terbuka paling populer saat ini.

Anda jelas membutuhkan indeks, karena hampir setiap jawaban menyarankan. Anda benar-benar dapat meningkatkan perangkat keras Anda, tetapi karena Anda telah mengatakan bahwa itu sudah diperbaiki, saya tidak akan menjelaskannya.

Saya punya beberapa petunjuk yang relevan untuk Anda:

  1. Indekskan hanya bidang tempat Anda ingin menemukan istilah penelusuran daripada mengindeks seluruh kumpulan data;
  2. Buat indeks bertingkat (yaitu indeks di atas indeks) sehingga pencarian indeks Anda lebih cepat. Ini akan sangat relevan jika indeks Anda bertambah hingga lebih dari 8 GB;
  3. Saya ingin merekomendasikan caching pencarian Anda sebagai alternatif, tetapi ini akan menyebabkan pencarian baru memakan waktu setengah hari lagi. Jadi, mempraproses data Anda untuk membuat indeks jelas lebih baik daripada memproses data saat kueri datang.

Pembaruan Kecil:

Banyak jawaban di sini yang menyarankan Anda untuk meletakkan data di Cloud. Saya sangat menyarankan, bahkan untuk data medis yang dianonimkan, Anda mengonfirmasi dengan sumbernya (kecuali jika Anda mengambil data dari web) bahwa hal itu boleh dilakukan.


Untuk mempercepat pencarian Anda, Anda memerlukan indeks terbalik. Agar dapat menambahkan dokumen baru tanpa perlu mengindeks ulang semua file yang ada, indeks harus inkremental.

Salah satu proyek sumber terbuka pertama yang memperkenalkan pengindeksan inkremental adalah Apache Lucense. Itu masih merupakan pengindeksan dan mesin pencari yang paling banyak digunakan meskipun alat lain yang memperluas fungsinya lebih populer saat ini. Elasiticsearch dan Solr keduanya didasarkan pada Lucense. Namun, selama Anda tidak memerlukan antarmuka web, dukungan untuk kueri analitik, pemfilteran, pengelompokan, dukungan untuk pengindeksan file non-teks, atau infrastruktur untuk penyiapan kluster melalui beberapa host, Lucene masih merupakan pilihan terbaik.

Apache Lucense adalah pustaka Java, tetapi dilengkapi dengan aplikasi demo berbasis baris perintah yang berfungsi penuh. Demo dasar ini seharusnya sudah menyediakan semua fungsi yang Anda butuhkan.

Dengan sedikit pengetahuan Java, akan mudah untuk menyesuaikan aplikasi dengan kebutuhan Anda. Anda akan terkejut betapa sederhananya kode sumber dari aplikasi demo tersebut. Jika Java bukan bahasa pilihan Anda, pembungkusnya untuk Pyhton, PyLucene juga bisa menjadi alternatif. Pengindeksan aplikasi demo sudah dikurangi hampir seminimal mungkin. Secara default, tidak ada fungsi lanjutan yang digunakan seperti stemming atau pengoptimalan untuk kueri kompleks - fitur, kemungkinan besar Anda tidak akan memerlukannya untuk kasus penggunaan Anda, tetapi akan meningkatkan ukuran indeks dan waktu pengindeksan.


Linux
  1. Cara Menggunakan Perintah Grep untuk Menemukan Teks di File

  2. Cara Menggabungkan Dua File Teks di Linux

  3. Cara memeriksa file besar di konsol

  1. Bagaimana cara menemukan file di Ubuntu?

  2. Bagaimana Cara Mempercepat Pencarian Di Dash?

  3. Pencarian teks cepat di lebih dari 600.000 file

  1. Cara Mencari untuk Menemukan Kata di Editor Teks Vim atau Vi

  2. Cara Menemukan File di Linux Dengan Perintah Temukan

  3. Bagaimana membandingkan dan menggabungkan file teks di Linux