RediSearch 2.0 ออกมาในตัวอย่างสาธารณะแล้ว! ฟีเจอร์ส่วนใหญ่ในการเปิดตัวครั้งสำคัญนี้มาจากความคิดเห็นของคุณ โดยมุ่งเน้นที่การปรับปรุงประสบการณ์ของนักพัฒนาซอฟต์แวร์และความสามารถในการปรับขนาดที่เพิ่มขึ้น แต่โพสต์บล็อกนี้เน้นที่การช่วยคุณเริ่มต้นใช้งานความสามารถในการสร้างดัชนีข้อมูลใหม่ของ RediSearch 2.0 และวิธีที่ดีกว่าในการสร้างดัชนี
การมีเครื่องมือสืบค้นและการรวมที่สมบูรณ์ในฐานข้อมูล Redis ของคุณเปิดประตูสู่แอปพลิเคชันใหม่ๆ มากมายที่ทำงานได้ดีกว่าการแคช คุณสามารถใช้ Redis เป็นฐานข้อมูลหลักได้แม้ในเวลาที่คุณต้องการเข้าถึงข้อมูลโดยใช้การสืบค้นที่ซับซ้อน โดยไม่ต้องเพิ่มความซับซ้อนให้กับโค้ดเพื่ออัปเดตและจัดทำดัชนีข้อมูล ทั้งหมดนี้ด้วยความเร็ว ความน่าเชื่อถือ และความสามารถในการปรับขนาดอันโด่งดังของ Redis!
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสิ่งใหม่ๆ โปรดดู ขอแนะนำ RediSearch 2.0
เริ่มต้นใช้งาน
ข้อกำหนดเบื้องต้น
ในการเริ่มต้นใช้งาน RediSearch 2.0 คุณจะต้อง:
- นักเทียบท่า
- อินเทอร์เฟซบรรทัดคำสั่ง Redis สองตัวเลือกหลักของคุณคือ:
- redis-cli ที่มาพร้อมกับ Redis
- RedisInsight ซึ่งเป็น GUI ฟรีสำหรับการพัฒนาแอปพลิเคชัน Redis ที่คล่องตัว ซึ่งรวมถึงอินเทอร์เฟซบรรทัดคำสั่งด้วย
รับฐานข้อมูล Redis โดยเปิดใช้งาน RediSearch
คุณสามารถติดตั้งและใช้ RediSearch 2.0 ได้หลายวิธี:
- Redis Enterprise Cloud
- ซอฟต์แวร์ Redis Enterprise
- RediSearch ไบนารี
- ค้นหาซ้ำแหล่งที่มา
- ภาพนักเทียบท่า
เพื่อความง่าย โพสต์บล็อกนี้จะใช้อิมเมจ Docker (หากคุณได้ติดตั้ง RedisSearch 2.0 แล้ว คุณสามารถข้ามไปยังส่วนถัดไปได้) ในการเริ่มอินสแตนซ์ Redis ด้วย Docker ให้เปิดเทอร์มินัลแล้วเรียกใช้คำสั่งต่อไปนี้:
> docker run -it --rm --name redis-search-2 \ -p 6379:6379 \ redis/redisearch:2.0.0
หมายเหตุ: คอนเทนเนอร์จะถูกลบออกโดยอัตโนมัติเมื่อออกจาก (พารามิเตอร์ –rm)
เชื่อมต่อกับ Redis และแทรกข้อมูล
ใช้ไคลเอนต์ Redis ที่คุณชื่นชอบ เชื่อมต่อกับฐานข้อมูล RediSearch
หากคุณเริ่มต้นอินสแตนซ์ Redis ด้วย Docker คุณสามารถใช้คำสั่งต่อไปนี้เพื่อใช้ redis-cli ฝังอยู่ในคอนเทนเนอร์:
> docker exec -it redis-search-2 redis-cli
หากคุณต้องการใช้ Redis Insight ให้เพิ่มอินสแตนซ์ RediSearch แล้วไปที่ CLI
แทรกข้อมูล
ตอนนี้คุณพร้อมที่จะแทรกข้อมูลบางส่วนแล้ว ตัวอย่างนี้ใช้ข้อมูลภาพยนตร์ที่จัดเก็บเป็น Redis Hashes เรามาลองแทรกภาพยนตร์สองสามเรื่องกัน:
> HSET movie:11002 title "Star Wars: Episode V - The Empire Strikes Back" plot "Luke Skywalker begins Jedi training with Yoda." release_year 1980 genre "Action" rating 8.7 votes 1127635 (integer) 6 > HSET movie:11003 title "The Godfather" plot "The aging patriarch of an organized crime dynasty transfers control of his empire to his son." release_year 1972 genre "Drama" rating 9.2 votes 1563839 (integer) 6
ฐานข้อมูลตอนนี้มีสองแฮช ง่ายต่อการดึงข้อมูลโดยใช้คำสั่งต่อไปนี้ หากคุณรู้คีย์ของภาพยนตร์ (movie:11002 ):
> HMGET movie:11002 title rating 1) "Star Wars: Episode V - The Empire Strikes Back" 2) "8.7"
แต่คุณจะสืบค้นฐานข้อมูลเพื่อรับรายการภาพยนตร์โดยใช้ title . ได้อย่างไร , ประเภท หรือ release_year ?
โครงสร้างข้อมูล "แกนกลาง" ของ Redis คุณต้องจัดการดัชนีด้วยตนเองโดยใช้ชุดเพื่อเชื่อมโยงประเภทกับรายการรหัสภาพยนตร์ เช่น และเพิ่มโค้ดจำนวนมากลงในแอปพลิเคชันเพื่อจัดการและค้นหาดัชนี
แต่ด้วย RediSearch คุณสามารถกำหนดดัชนีที่เกี่ยวข้องกับข้อมูลของคุณ และปล่อยให้ฐานข้อมูลจัดการได้ จากนั้นคุณสามารถใช้เครื่องมือสืบค้นเพื่อค้นหา/ค้นหาข้อมูลโดยใช้ดัชนีรอง
สร้างดัชนี RediSearch สำหรับภาพยนตร์
ในการสร้างดัชนี คุณต้องกำหนดสคีมาเพื่อแสดงรายการฟิลด์และประเภทที่จัดทำดัชนี และคุณสามารถใช้ในการสืบค้นของคุณได้
สำหรับตัวอย่างนี้ คุณจะจัดทำดัชนีสี่ช่อง:
- ชื่อเรื่อง
- ปีที่วางจำหน่าย
- การให้คะแนน
- ประเภท
การสร้างดัชนีทำได้โดยใช้ FT.CREATE คำสั่ง:
> FT.CREATE idx:movie ON hash PREFIX 1 "movie:" SCHEMA title TEXT SORTABLE release_year NUMERIC SORTABLE rating NUMERIC SORTABLE genre TAG SORTABLE OK
ก่อนเรียกใช้การสืบค้นข้อมูล ลองมาดูที่ FT.CREATE . กันก่อนดีกว่า คำสั่ง:
- idx:movie :ชื่อของดัชนีที่คุณจะใช้เมื่อทำการสืบค้น
- เปิดแฮช :ประเภทของโครงสร้างที่จะทำดัชนี (โปรดทราบว่า RediSearch 2.0 รองรับเฉพาะโครงสร้างแฮช แต่พารามิเตอร์นี้จะอนุญาตให้ RediSearch สร้างดัชนีโครงสร้างอื่นๆ ได้ในอนาคต)
- คำนำหน้า 1 “ภาพยนตร์:” :คำนำหน้าของคีย์ที่ควรจัดทำดัชนี นี่คือรายการ เนื่องจากเราต้องการสร้างดัชนีภาพยนตร์เท่านั้น:* แป้นตัวเลขจึงเป็น 1 หากคุณต้องการสร้างดัชนีภาพยนตร์และรายการทีวีที่มีช่องเดียวกัน คุณสามารถใช้:PREFIX 2 “movie:” “tv_show:”
- สคีมา … :กำหนดสคีมา ฟิลด์ และประเภทที่จะจัดทำดัชนี ดังที่คุณเห็นในคำสั่ง เรากำลังใช้พารามิเตอร์ TEXT, NUMERIC และ TAG และ SORTABLE
เอ็นจิ้น RediSearch 2.0 จะสแกนฐานข้อมูลโดยใช้ค่า PREFIX และอัปเดตดัชนีตามคำจำกัดความของสคีมา ทำให้เพิ่มดัชนีลงในแอปพลิเคชันที่มีอยู่ได้อย่างง่ายดาย ที่ใช้แฮช ไม่จำเป็นต้องเปลี่ยนรหัส
คุณสามารถดูข้อมูลดัชนีด้วยคำสั่งต่อไปนี้:
> FT.INFO idx:movie 1) index_name 2) idx:movie ... 46) 1) global_idle 2) (integer) 0 ...
ตอนนี้เราก็พร้อมที่จะใช้ดัชนีและสืบค้นฐานข้อมูลแล้ว
สอบถามฐานข้อมูลภาพยนตร์
สำหรับส่วนนี้ คุณจะใช้ FT.SEARCH คำสั่งและไวยากรณ์ของมัน โปรดทราบว่าเป้าหมายของโพสต์บนบล็อกนี้คือเพื่อให้คุณเริ่มต้นได้ ดังนั้นเราจึงยึดหลักพื้นฐานและไม่ลงรายละเอียดทั้งหมด หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ RediSearch โปรดดูเอกสารประกอบและบทแนะนำ
ข้อความค้นหาแบบเต็ม
RediSearch เป็นเสิร์ชเอ็นจิ้นแบบเต็ม ทำให้แอปพลิเคชันสามารถเรียกใช้การสืบค้นที่มีประสิทธิภาพ à la Google เช่น ค้นหาภาพยนตร์ทั้งหมดที่มี “war ”-ข้อมูลที่เกี่ยวข้อง คุณจะเรียกใช้คำสั่งต่อไปนี้:
> FT.SEARCH idx:movie "war" RETURN 3 title release_year rating 1) (integer) 1 2) "movie:11002" 3) 1) "title" 2) "Star Wars: Episode V - The Empire Strikes Back" 3) "release_year" 4) "1980" 5) "rating" 6) "8.7"
อย่างที่คุณเห็น หนังเรื่อง Star Wars:Episode V—The Empire Strikes Back ถูกพบ ถึงแม้จะใช้เพียงคำว่า สงคราม ” เพื่อให้ตรงกับ “สงคราม ” ในชื่อเรื่อง เนื่องจากชื่อได้รับการจัดทำดัชนีเป็นข้อความ ดังนั้นฟิลด์นี้จึงถูกแปลงเป็นโทเค็นและแยกส่วน
นอกจากนี้ คำสั่งไม่ได้ระบุฟิลด์ ดังนั้นคำว่า "สงคราม" (และคำที่เกี่ยวข้อง ) ถูกค้นหาในช่องข้อความทั้งหมดของดัชนี หากคุณต้องการค้นหาฟิลด์เฉพาะ คุณจะใช้ @field สัญกรณ์ดังที่แสดงไว้ที่นี่:
> FT.SEARCH idx:movie "@title:war" RETURN 3 title release_year rating
คุณสามารถเรียกใช้คำค้นหาแบบเต็มเพิ่มเติมกับชุดข้อมูลง่ายๆ นี้ได้ ดังที่แสดงไว้ที่นี่ (หมายเหตุ:เพื่อให้เอกสารสั้น ผลลัพธ์ของข้อความค้นหาจะไม่แสดง):
คำนำหน้าตรงกัน:
> FT.SEARCH idx:movie "emp*" RETURN 3 title release_year rating
การค้นหาแบบคลุมเครือ:
> FT.SEARCH idx:movie "%gdfather%" RETURN 3 title release_year rating
สหภาพแรงงาน:
> FT.SEARCH idx:movie "war | %gdfather% " RETURN 3 title release_year rating
คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับไวยากรณ์ข้อความค้นหาได้ในเอกสารประกอบ RediSearch
ค้นหาช่องแท็ก
ใช้ช่องแท็ก "ประเภท" เพื่อค้นหาภาพยนตร์ "ดราม่า" ทั้งหมด:
> FT.SEARCH idx:movie "@genre:{Drama}" RETURN 3 title release_year rating 1) (integer) 1 2) "movie:11003" 3) 1) "title" 2) "The Godfather" 3) "release_year" 4) "1972" 5) "rating" 6) "9.2"
ไวยากรณ์ @field:{value} แสดงว่าคุณกำลังค้นหาในช่องแท็ก คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับตัวกรองแท็กได้ในเอกสารประกอบของ RediSearch
อัปเดตฐานข้อมูลและแบบสอบถาม
จนถึงตอนนี้ ข้อมูลทั้งหมดที่คุณกำลังสืบค้นสร้างขึ้นก่อนดัชนีและจัดทำดัชนีระหว่างการสร้างดัชนี มาเปลี่ยนแปลงสิ่งต่างๆ ด้วยการเพิ่มภาพยนตร์ใหม่:
> HSET "movie:11005" title "Star Wars: Episode VI - Return of the Jedi" plot "The Rebels destroy the Empire's Death Star." release_year 1983 genre "Action" rating 8.3 votes 906260 (integer) 6
คุณสามารถใช้คำค้นหาก่อนหน้าซ้ำได้:
> FT.SEARCH idx:movie "war" RETURN 3 title release_year rating 1) (integer) 2 2) "movie:11005" 3) 1) "title" 2) "Star Wars: Episode VI - Return of the Jedi" 3) "release_year" 4) "1983" 5) "rating" 6) "8.3" 4) "movie:11002" 5) 1) "title" 2) "Star Wars: Episode V - The Empire Strikes Back" 3) "release_year" 4) "1980" 5) "rating" 6) "8.7"
อย่างที่คุณเห็น ภาพยนตร์เรื่องใหม่ได้รับการจัดทำดัชนีโดยอัตโนมัติ
ในทำนองเดียวกัน หากคุณลบหรือทำให้ภาพยนตร์หมดอายุ ดัชนีจะได้รับการอัปเดตโดยอัตโนมัติ ดังที่แสดงที่นี่:
> EXPIRE "movie:11002" 15 (integer) 1
หากคุณรอ 15 วินาทีและเรียกใช้คำค้นหา คุณจะเห็นว่าภาพยนตร์ถูกลบออกจากดัชนีแล้ว
สิ่งนี้ค่อนข้างมีประสิทธิภาพเมื่อคุณต้องการค้นหาชั่วคราวและให้ฐานข้อมูลจัดการการหมดอายุของข้อมูลและดัชนี คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับการค้นหาชั่วคราวในบล็อกโพสต์ของเราที่มีเนื้อหาเกี่ยวกับกรณีของการค้นหาชั่วคราว
ฉันจะไปจากที่นี่ได้ที่ไหน
โพสต์นี้แชร์ข้อมูลพื้นฐานบางอย่างของ RediSearch และแสดงให้เห็นว่าข้อมูลการจัดทำดัชนีมีความโปร่งใสจากโค้ดแอปพลิเคชันของคุณอย่างไร ฟังก์ชันนี้เป็นฟังก์ชันใหม่ใน RediSearch 2.0 เนื่องจากนักพัฒนาซอฟต์แวร์ RediSearch 1.x ต้องใช้ FT.ADD โดยเฉพาะ คำสั่งจัดทำดัชนีข้อมูล
นอกเหนือจากฟังก์ชันการค้นหาและการจัดทำดัชนีที่กล่าวถึงในโพสต์บล็อกนี้ RediSearch ยังมีความสามารถในการรวบรวมข้อมูลที่มีประสิทธิภาพ ซึ่งครอบคลุมอยู่ในเอกสารประกอบ RediSearch บทแนะนำ และหลักสูตรออนไลน์
บทช่วยสอนมีข้อมูลเดียวกัน แต่มีชุดข้อมูลที่ใหญ่กว่าและแบบสอบถามและการรวมตัวอย่างที่มากขึ้น นอกจากนี้ยังมีแอปพลิเคชันที่แสดงวิธีใช้ RediSearch กับภาษาการเขียนโปรแกรม เช่น Java, Python และ Node.js หากต้องการเรียนรู้เพิ่มเติม โปรดดูแหล่งข้อมูลเพิ่มเติมเหล่านี้:
- หน้าเว็บ RediSearch
- บทแนะนำ RediSearch 2.0
- ค้นพบกรณีการใช้งานและโครงการใหม่