Rumah > Artikel > pangkalan data > Cara Redis melaksanakan fungsi carian teragih
Redis ialah pangkalan data NoSQL berprestasi tinggi yang menyediakan fungsi dan struktur data yang kaya, termasuk rentetan, jadual cincang, senarai, set dan Koleksi tertib dll. Selain itu, Redis juga menyediakan beberapa fungsi lanjutan, seperti menerbitkan dan melanggan, skrip Lua dan transaksi. Antaranya, fungsi carian yang diedarkan Redis sangat praktikal dan boleh membantu kami mendapatkan data yang banyak dengan cepat. Dalam artikel ini, kami akan meneroka cara Redis melaksanakan fungsi carian teragih dan memberikan contoh kod khusus.
1 Gambaran Keseluruhan fungsi carian teragih Redis
Redis menyediakan dua fungsi carian teragih: carian teks penuh dan pengimbasan berdasarkan atribut tertentu. Di sini kita mula-mula melihat konsep dan kaedah pelaksanaan kedua-dua fungsi ini.
1. Carian teks penuh
Carian teks penuh merujuk kepada mencari rentetan tertentu dalam data teks. Dalam Redis, kami boleh menggunakan pemalam Redisearch untuk melaksanakan fungsi carian teks penuh. Pencarian semula menggunakan indeks terbalik untuk melaksanakan carian, iaitu, ia mula-mula membahagikan setiap dokumen kepada istilah, kemudian mewujudkan hubungan pemetaan antara setiap istilah dan nombor dokumen, dan akhirnya mencipta jadual indeks terbalik untuk semua istilah. Semasa mencari, anda hanya perlu mencari istilah yang akan ditanya dalam jadual indeks terbalik.
Redisearch menyokong carian kad bebas dan kabur semasa mencari, dan juga menyokong operasi logik seperti "DAN" dan "ATAU". Hasil carian boleh diisih mengikut peraturan tertentu, atau anda boleh menentukan bahawa hanya sebahagian daripada hasil carian akan dikembalikan.
2. Pengimbasan berasaskan atribut
Pengimbasan berasaskan atribut merujuk kepada menapis data yang layak berdasarkan satu atau beberapa atribut dalam set data dengan berbilang data. Dalam Redis, kita boleh menggunakan RedisGears dan Redisearch untuk mencapai fungsi ini.
RedisGears ialah pemalam yang diselenggara oleh Redis Ia menyediakan fungsi menukar pasangan nilai kunci Redis kepada strim. Kami juga boleh menggunakan RedisGears untuk mencipta beberapa strim dan kemudian mengagregatkan strim ini menggunakan arahan "FT.AGGREGATE" Redisearch. Selepas pengagregatan, data boleh ditapis dan diisih, dan juga boleh dikeluarkan kepada struktur data lain dalam Redis atau dihantar melalui rangkaian.
2. Pelaksanaan khusus fungsi carian teragih Redis
Di sini, kami mengambil carian teks penuh sebagai contoh untuk melaksanakan fungsi carian teragih. Kami akan menggunakan redisearch-py sebagai klien Python dan mensimulasikan contoh Redis pada dua nod. Dalam contoh ini, kami akan mencipta indeks dalam setiap satu daripada dua kejadian dan carian Redis.
1. Pasang kebergantungan
Pasang pustaka redisearch-py:
pip install redisearch
#🎜.🎜 contoh Pertama, kita perlu memulakan dua kejadian Redis pada dua port berbeza. Di sini kami menggunakan imej rasmi Redis dan mencipta dua contoh dengan mengubah suai parameter port. $ docker run -d -p 6380:6379 redis$ docker run -d -p 6381:6379 redis --port 6379
#🎜🎜 Buat index#3
Buat dua indeks teks penuh menggunakan objek RediSearch dalam redisearch-py (antara muka utama redisearch-py). Di sini kami telah menggunakan arahan "FT.CREATE".
dari carian semula import Klien, Pertanyaan, TextField, NumericField
client1 = Client('index1', port=6380)client2 = Client('index2', port=6381
client1.create_index((TextField('title', weight=5.0), TextField('content')))
Di sini kita takrifkan dua medan, iaitu tajuk dan kandungan. Antaranya, berat tajuk ialah 5.0, dan berat kandungan ialah nilai lalai 1.0, menunjukkan bahawa tajuk adalah lebih penting. Kami boleh menggunakan kedua-dua medan ini untuk memadankan pertanyaan carian.
4 Tambahkan data
Tambahkan beberapa data pada setiap satu daripada dua indeks untuk operasi carian seterusnya. Di sini kita hanya menggunakan arahan "FT.ADD" untuk menambah data.
client1.redis.execute_command('FT.ADD', 'idx1', 'doc1', 1.0, 'FIELDS', 'title', 'this is a title', 'content', ' inilah beberapa kandungan')
client1.redis.execute_command('FT.ADD', 'idx1', 'doc2', 1.0, 'FIELDS', 'title', 'title is important', 'content', 'kandungan tidak begitu penting')
client2.redis.execute_command('FT.ADD', 'idx2', 'doc1', 1.0, 'FIELDS', 'title', 'ini adalah tajuk', 'kandungan', 'ini ada beberapa kandungan')
Di sini kami telah menambah dua dokumen, setiap dokumen mempunyai dua medan iaitu tajuk dan kandungan.
5 Cari data
Gunakan objek RediSearch untuk melaksanakan arahan carian. Di sini kita mencari menggunakan arahan "FT.SEARCH" dan menentukan rentetan pertanyaan dan indeks untuk dicari.
result1 = client1.search('content')
result2 = client2.search('content')
Seperti yang anda lihat, kedua-dua set keputusan datang daripada Dua indeks berbeza.
6. Paparkan hasil
Akhir sekali, kami menggunakan perpustakaan pprint dalam Python untuk mencetak hasil:
dari pprint import pprint#🎜 🎜# pprint(result1)
pprint(result2)
Hasil larian adalah seperti berikut:
{'docs': [{'content': 'di sini terdapat beberapa kandungan', 'tajuk': 'ini adalah tajuk', 'id': 'doc1'}], 'total_results': 1, ' kursor': 0, 'total_pages': 1}
{'docs': [{'content': 'here is some content', 'title': 'ini adalah tajuk', 'id': 'doc1 '}], 'total_results': 1, 'cursor': 0, 'total_pages': 1}
Kita dapat melihat bahawa kedua-dua hasil carian termasuk dokumen "ini ada kandungan" .
3. Ringkasan
Dalam artikel ini, kami memperkenalkan fungsi carian yang diedarkan Redis dan memberikan contoh kod untuk carian teks penuh. Apabila melaksanakan carian teragih, kita perlu menggunakan dua pemalam, Carian Semula dan RedisGears, dan melaksanakan konfigurasi kluster pada Redis.
Fungsi carian yang diedarkan Redis bukan sahaja boleh membantu kami mendapatkan semula sejumlah besar data dengan cepat, tetapi juga mengelakkan satu titik kegagalan dan meningkatkan ketersediaan sistem. Kami percaya bahawa melalui kajian artikel ini, anda mempunyai pemahaman yang lebih mendalam tentang fungsi carian diedarkan Redis.
Atas ialah kandungan terperinci Cara Redis melaksanakan fungsi carian teragih. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!