Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

เริ่มต้นใช้งาน RediSearch 2.0

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 สำหรับภาพยนตร์

ในการสร้างดัชนี คุณต้องกำหนดสคีมาเพื่อแสดงรายการฟิลด์และประเภทที่จัดทำดัชนี และคุณสามารถใช้ในการสืบค้นของคุณได้

สำหรับตัวอย่างนี้ คุณจะจัดทำดัชนีสี่ช่อง:

  1. ชื่อเรื่อง
  2. ปีที่วางจำหน่าย
  3. การให้คะแนน
  4. ประเภท

การสร้างดัชนีทำได้โดยใช้ 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
  • ค้นพบกรณีการใช้งานและโครงการใหม่