Typesense เป็นเครื่องมือค้นหาที่รวดเร็วและทนทานต่อการพิมพ์ผิดสำหรับการสร้างประสบการณ์การค้นหาที่น่าพึงพอใจ
ทางเลือกโอเพ่นซอร์ส Algolia &
ทางเลือก ElasticSearch ที่ใช้งานง่ายกว่า
เว็บไซต์ | เอกสารประกอบ | แผนงาน | ชุมชนหย่อน | กระทู้ชุมชน | ทวิตเตอร์
นี่คือ การสาธิตสด บางส่วนที่แสดงการทำงานของ Typesense บนชุดข้อมูลขนาดใหญ่:
- หากคุณต้องการดูวิดีโอ:
ไม่เห็นคุณลักษณะในรายการนี้ใช่หรือไม่ ค้นหาตัวติดตามปัญหาของเราหากมีคนร้องขอแล้ว และเพิ่มความคิดเห็นเพื่ออธิบายกรณีการใช้งานของคุณ หรือเปิดปัญหาใหม่หากไม่มี เราจัดลำดับความสำคัญของแผนงานของเราตามคำติชมของผู้ใช้ ดังนั้นเราจึงยินดีรับฟังจากคุณ
นี่คือแผนงานสาธารณะของ Typesense: https://typesense.link/roadmap
คอลัมน์แรกยังอธิบายวิธีที่เราจัดลำดับความสำคัญของฟีเจอร์ต่างๆ คุณจะมีอิทธิพลต่อการจัดลำดับความสำคัญและจังหวะการเปิดตัวของเราได้อย่างไร
เราอยากจะเปรียบเทียบกับชุดข้อมูลขนาดใหญ่ หากเราสามารถค้นหาชุดข้อมูลขนาดใหญ่ในโดเมนสาธารณะได้ หากคุณมีข้อเสนอแนะสำหรับชุดข้อมูลที่มีโครงสร้างที่เปิดอยู่ โปรดแจ้งให้เราทราบโดยการเปิดปัญหา นอกจากนี้เรายังยินดีเป็นอย่างยิ่งหากคุณสามารถแบ่งปันการวัดประสิทธิภาพจากชุดข้อมูลขนาดใหญ่ของคุณเองได้ กรุณาส่ง PR มาหาเรา!
Typesense ถูกใช้โดยผู้ใช้หลากหลายกลุ่มในโดเมนและแนวดิ่งที่แตกต่างกัน
บน Typesense Cloud เราให้บริการการค้นหามากกว่า 10 พันล้าน ครั้งต่อเดือน ภาพ Docker ของ Typesense ได้รับการดาวน์โหลดมากกว่า 12 ล้านครั้ง
เมื่อเร็วๆ นี้เราได้เริ่มบันทึกว่าใครกำลังใช้งานสิ่งนี้ใน Showcase ของเรา หากคุณต้องการถูกรวมไว้ในรายชื่อ โปรดแก้ไข SHOWCASE.md และส่งประชาสัมพันธ์ถึงเรา
คุณจะเห็นรายการโลโก้ผู้ใช้ในหน้าแรกของ Typesense Cloud
ตัวเลือกที่ 1: คุณสามารถดาวน์โหลดแพ็คเกจไบนารีที่เราเผยแพร่สำหรับ Linux (x86_64 & arm64) และ Mac (x86_64)
ตัวเลือกที่ 2: คุณยังสามารถเรียกใช้ Typesense จากอิมเมจ Docker อย่างเป็นทางการของเราได้
ตัวเลือกที่ 3: หมุนคลัสเตอร์ที่ได้รับการจัดการด้วย Typesense Cloud:
ต่อไปนี้เป็นตัวอย่างสั้นๆ ที่แสดงวิธีที่คุณสามารถสร้างคอลเลกชัน จัดทำดัชนีเอกสาร และค้นหาใน Typesense
เริ่มต้นด้วยการเริ่มต้นเซิร์ฟเวอร์ Typesense ผ่าน Docker:
docker run -p 8108:8108 -v/tmp/data:/data typesense/typesense:27.1 --data-dir /data --api-key=Hu52dwsas2AdxdE
เรามีไคลเอนต์ API ในสองสามภาษา แต่ลองใช้ไคลเอนต์ Python สำหรับตัวอย่างนี้
ติดตั้งไคลเอนต์ Python สำหรับ Typesense:
pip install typesense
ตอนนี้เราสามารถเริ่มต้นไคลเอนต์และสร้างคอลเลกชัน companies
ได้:
import typesense
client = typesense . Client ({
'api_key' : 'Hu52dwsas2AdxdE' ,
'nodes' : [{
'host' : 'localhost' ,
'port' : '8108' ,
'protocol' : 'http'
}],
'connection_timeout_seconds' : 2
})
create_response = client . collections . create ({
"name" : "companies" ,
"fields" : [
{ "name" : "company_name" , "type" : "string" },
{ "name" : "num_employees" , "type" : "int32" },
{ "name" : "country" , "type" : "string" , "facet" : True }
],
"default_sorting_field" : "num_employees"
})
ตอนนี้ เรามาเพิ่มเอกสารในคอลเลกชันที่เราเพิ่งสร้างขึ้น:
document = {
"id" : "124" ,
"company_name" : "Stark Industries" ,
"num_employees" : 5215 ,
"country" : "USA"
}
client . collections [ 'companies' ]. documents . create ( document )
สุดท้ายนี้ เรามาค้นหาเอกสารที่เราเพิ่งจัดทำดัชนีกัน:
search_parameters = {
'q' : 'stork' ,
'query_by' : 'company_name' ,
'filter_by' : 'num_employees:>100' ,
'sort_by' : 'num_employees:desc'
}
client . collections [ 'companies' ]. documents . search ( search_parameters )
คุณสังเกตเห็นการพิมพ์ผิดในข้อความค้นหาหรือไม่ ไม่ใช่เรื่องใหญ่ Typesense จัดการข้อผิดพลาดในการพิมพ์นอกกรอบ!
มีคำแนะนำแบบทีละขั้นตอนบนเว็บไซต์ของเราที่นี่
สิ่งนี้จะแนะนำคุณตลอดกระบวนการเริ่มต้นเซิร์ฟเวอร์ Typesense การจัดทำดัชนีข้อมูลในนั้น และการสืบค้นชุดข้อมูล
นี่คือเอกสาร API อย่างเป็นทางการของเราซึ่งมีอยู่บนเว็บไซต์ของเรา: https://typesense.org/api
หากคุณสังเกตเห็นปัญหาใดๆ เกี่ยวกับเอกสารประกอบหรือคำแนะนำ โปรดแจ้งให้เราทราบหรือส่งประชาสัมพันธ์ถึงเราที่นี่: https://github.com/typesense/typesense-website
แม้ว่าคุณจะสามารถใช้ CURL เพื่อโต้ตอบกับเซิร์ฟเวอร์ Typesense ได้โดยตรง แต่เราขอเสนอไคลเอนต์ API อย่างเป็นทางการเพื่อลดความซับซ้อนในการใช้ Typesense จากภาษาที่คุณเลือก ไคลเอ็นต์ API มาพร้อมกับกลยุทธ์การลองใหม่อย่างชาญฉลาดเพื่อให้แน่ใจว่าการเรียก API ที่ทำผ่านไคลเอ็นต์เหล่านั้นมีความยืดหยุ่น โดยเฉพาะในการตั้งค่า HA
หากเราไม่เสนอไคลเอ็นต์ API ในภาษาของคุณ คุณยังคงสามารถใช้ไลบรารีไคลเอ็นต์ HTTP ยอดนิยมใดๆ เพื่อเข้าถึง API ของ Typesense ได้โดยตรง
ต่อไปนี้คือไคลเอ็นต์และการผสานรวมที่สนับสนุนโดยชุมชน:
เรายินดีรับการสนับสนุนจากชุมชนเพื่อเพิ่มไลบรารีลูกค้าและการบูรณาการอย่างเป็นทางการเพิ่มเติม โปรดติดต่อเราที่ [email protected] หรือเปิดปัญหาบน GitHub เพื่อร่วมงานกับเราในด้านสถาปัตยกรรม
นอกจากนี้เรายังมีการบูรณาการกรอบการทำงานดังต่อไปนี้:
เรามีคอลเลกชันบุรุษไปรษณีย์ที่ดูแลโดยชุมชนที่นี่: https://github.com/typesense/postman
Postman เป็นแอปที่ให้คุณส่งคำขอ HTTP โดยการชี้และคลิก แทนที่จะต้องพิมพ์ลงใน Terminal คอลเลกชันบุรุษไปรษณีย์ด้านบนให้คำขอเทมเพลตที่คุณสามารถนำเข้าไปยังบุรุษไปรษณีย์เพื่อทำการเรียก API ไปยัง Typesense ได้อย่างรวดเร็ว
คุณสามารถใช้อะแดปเตอร์ InstantSearch.js ของเราเพื่อสร้างประสบการณ์การค้นหาที่มีประสิทธิภาพได้อย่างรวดเร็ว พร้อมด้วยการกรอง การเรียงลำดับ การแบ่งหน้า และอื่นๆ
นี่คือวิธีการ: https://typesense.org/docs/guide/search-ui-components.html
Elasticsearch เป็นซอฟต์แวร์ชิ้นใหญ่ที่ใช้ความพยายามเพียงเล็กน้อยในการตั้งค่า บริหารจัดการ ปรับขนาด และปรับแต่ง มีพารามิเตอร์การกำหนดค่าไม่กี่พันรายการเพื่อให้ได้การกำหนดค่าในอุดมคติของคุณ ดังนั้นจึงเหมาะกว่าสำหรับทีมขนาดใหญ่ที่มีแบนด์วิดท์ในการเตรียมให้พร้อมสำหรับการผลิต ตรวจสอบและปรับขนาดเป็นประจำ โดยเฉพาะอย่างยิ่งเมื่อพวกเขาจำเป็นต้องจัดเก็บเอกสารหลายพันล้านและข้อมูลหลายเพตะไบต์ (เช่น บันทึก)
Typesense สร้างขึ้นโดยเฉพาะเพื่อลด "เวลาออกสู่ตลาด" เพื่อประสบการณ์การค้นหาที่น่าพึงพอใจ เป็นทางเลือกที่มีน้ำหนักเบาแต่ทรงพลังและปรับขนาดได้ ซึ่งมุ่งเน้นไปที่ความสุขและประสบการณ์ของนักพัฒนาด้วย API ที่มีการจัดทำเอกสารไว้อย่างดี สะอาดตา ความหมายที่ชัดเจน และค่าเริ่มต้นที่ชาญฉลาด ดังนั้นจึงทำงานได้ดีนอกกรอบ โดยที่คุณไม่ต้องหมุนปุ่มใดๆ มากมาย .
Elasticsearch ยังทำงานบน JVM ซึ่งด้วยตัวมันเองเองอาจเป็นความพยายามในการปรับแต่งเพื่อให้ทำงานอย่างเหมาะสมที่สุด ในทางกลับกัน Typesense เป็นไบนารีเนทิฟในตัวน้ำหนักเบาตัวเดียว ดังนั้นจึงติดตั้งและใช้งานได้ง่าย
ดูการเปรียบเทียบคุณสมบัติแบบเคียงข้างกันที่นี่
Algolia เป็นผลิตภัณฑ์ที่ให้บริการค้นหาผ่านโฮสต์และมีกรรมสิทธิ์ ซึ่งทำงานได้ดีเมื่อต้นทุนไม่ใช่ปัญหา จากประสบการณ์ของเรา เว็บไซต์และแอปที่เติบโตอย่างรวดเร็วพบกับขีดจำกัดการค้นหาและการจัดทำดัชนีอย่างรวดเร็ว พร้อมด้วยการอัปเกรดแผนบริการราคาแพงเมื่อขยายขนาด
ในทางกลับกัน Typesense เป็นผลิตภัณฑ์โอเพ่นซอร์สที่คุณสามารถทำงานบนโครงสร้างพื้นฐานของคุณเอง หรือใช้ข้อเสนอ SaaS ที่มีการจัดการของเรา - Typesense Cloud เวอร์ชันโอเพ่นซอร์สนั้นใช้งานได้ฟรี (นอกเหนือจากค่าใช้จ่ายอินฟาเรดของคุณเอง) ด้วย Typesense Cloud เราไม่เรียกเก็บเงินตามบันทึกหรือการดำเนินการค้นหา แต่คุณจะได้รับคลัสเตอร์เฉพาะและคุณสามารถส่งข้อมูลและการรับส่งข้อมูลไปที่คลัสเตอร์ได้มากที่สุดเท่าที่จะจัดการได้ คุณจ่ายเฉพาะค่าใช้จ่ายรายชั่วโมงและแบนด์วิธคงที่เท่านั้น ขึ้นอยู่กับการกำหนดค่าที่คุณเลือก ซึ่งคล้ายกับแพลตฟอร์มคลาวด์สมัยใหม่ส่วนใหญ่
จากมุมมองของผลิตภัณฑ์ Typesense มีความใกล้ชิดกับ Algolia มากกว่า Elasticsearch อย่างไรก็ตาม เราได้แก้ไขข้อจำกัดที่สำคัญบางประการกับ Algolia แล้ว:
Algolia ต้องการดัชนีแยกต่างหากสำหรับการเรียงลำดับแต่ละลำดับ ซึ่งจะนับรวมในขีดจำกัดแผนของคุณ การตั้งค่าดัชนีส่วนใหญ่ เช่น ช่องที่จะค้นหา, ช่องที่ต้องค้นหา, ช่องที่จะจัดกลุ่มตาม, การตั้งค่าการจัดอันดับ ฯลฯ จะถูกกำหนดไว้ล่วงหน้าเมื่อสร้างดัชนีเทียบกับความสามารถในการตั้งค่าได้ทันทีในเวลาที่สืบค้น
ด้วย Typesense การตั้งค่าเหล่านี้สามารถกำหนดค่าได้ในขณะค้นหาผ่านพารามิเตอร์การสืบค้น ซึ่งทำให้มีความยืดหยุ่นสูงและปลดล็อกกรณีการใช้งานใหม่ Typesense ยังสามารถให้ผลลัพธ์ที่เรียงลำดับให้กับคุณด้วยดัชนีเดียว เทียบกับการต้องสร้างหลายรายการ ซึ่งจะช่วยลดการใช้หน่วยความจำ
Algolia นำเสนอคุณสมบัติต่อไปนี้ที่ Typesense ไม่มีในปัจจุบัน: การวิเคราะห์การค้นหาแบบส่วนบุคคลและบนเซิร์ฟเวอร์ สำหรับการวิเคราะห์ คุณยังคงใช้เครื่องมือการค้นหาของคุณบนฝั่งไคลเอ็นต์ และส่งการวัดการค้นหาไปยังเครื่องมือวิเคราะห์เว็บที่คุณเลือกได้
เราตั้งใจที่จะเชื่อมช่องว่างนี้ใน Typesense แต่ในระหว่างนี้ โปรดแจ้งให้เราทราบหากมีสิ่งใดที่ขัดขวางกรณีการใช้งานของคุณโดยการสร้างคำขอคุณลักษณะในตัวติดตามปัญหาของเรา
ดูการเปรียบเทียบคุณสมบัติแบบเคียงข้างกันที่นี่
เซิร์ฟเวอร์ Typesense ใหม่จะใช้หน่วยความจำประมาณ 30 MB เมื่อคุณเริ่มสร้างดัชนีเอกสาร การใช้หน่วยความจำจะเพิ่มขึ้นตามลำดับ จำนวนที่เพิ่มขึ้นนั้นขึ้นอยู่กับจำนวนและประเภทของฟิลด์ที่คุณจัดทำดัชนี
เรามุ่งมั่นที่จะรักษาโครงสร้างข้อมูลในหน่วยความจำให้มีความคล่องตัว เพื่อให้คุณทราบแนวคิดคร่าวๆ: เมื่อมีการจัดทำดัชนีชื่อ Hacker News 1 ล้านรายการพร้อมกับคะแนน Typesense จะใช้หน่วยความจำ 165 MB ขนาดข้อมูลบนดิสก์ในรูปแบบ JSON เท่ากันคือ 88 MB หากคุณมีตัวเลขจากชุดข้อมูลของคุณเองที่เราสามารถเพิ่มลงในส่วนนี้ได้ โปรดส่ง PR มาหาเรา!
จากประสบการณ์ของเรา บริษัทต่างๆ มักกังวลเมื่อ ไลบรารี ที่พวกเขาใช้ได้รับใบอนุญาต GPL เนื่องจากโค้ดของไลบรารีถูกรวมเข้ากับโค้ดของพวกเขาโดยตรง และจะนำไปสู่งานอนุพันธ์และกระตุ้นให้เกิดการปฏิบัติตาม GPL อย่างไรก็ตาม Typesense Server เป็น ซอฟต์แวร์เซิร์ฟเวอร์ และเราคาดหวังให้ผู้ใช้เรียกใช้เป็น daemon ที่แยกต่างหาก และไม่รวมเข้ากับโค้ดของตนเอง GPL ครอบคลุมและอนุญาตกรณีการใช้งานนี้อย่างไม่เห็นแก่ตัว (เช่น Linux ได้รับอนุญาตจาก GPL) ตอนนี้ AGPL คือสิ่งที่ทำให้ซอฟต์แวร์เซิร์ฟเวอร์เข้าถึงผ่านเครือข่ายส่งผลให้เกิดงานลอกเลียนแบบ ไม่ใช่ GPL และด้วยเหตุผลนั้น เราจึงเลือกที่จะไม่ใช้ AGPL สำหรับ Typesense
ตอนนี้ หากมีใครทำการแก้ไขเซิร์ฟเวอร์ Typesense GPL จะอนุญาตให้คุณยังคงเก็บการแก้ไขไว้กับตัวเองตราบเท่าที่คุณไม่แจกจ่ายโค้ดที่ถูกแก้ไข ตัวอย่างเช่น บริษัทสามารถแก้ไขเซิร์ฟเวอร์ Typesense และเรียกใช้โค้ดที่แก้ไขภายในและยังคงไม่จำเป็นต้องเปิดซอร์สการแก้ไข ตราบใดที่พวกเขาทำให้โค้ดที่แก้ไขพร้อมใช้งานสำหรับทุกคนที่สามารถเข้าถึงซอฟต์แวร์ที่ถูกแก้ไข
ตอนนี้ หากมีใครบางคนทำการแก้ไขเซิร์ฟเวอร์ Typesense และแจกจ่ายการแก้ไข นั่นคือจุดที่ GPL เข้ามา เนื่องจากเราได้เผยแพร่ผลงานของเราสู่ชุมชนแล้ว เราต้องการให้การแก้ไขของผู้อื่นเปิดกว้างต่อชุมชนใน จิตวิญญาณของโอเพ่นซอร์ส เราใช้ GPL เพื่อจุดประสงค์นี้ ใบอนุญาตอื่นๆ จะอนุญาตให้แก้ไขงานโอเพ่นซอร์สของเรา สร้างแหล่งปิด และเผยแพร่ได้ ซึ่งเราต้องการหลีกเลี่ยงด้วย Typesense เพื่อความยั่งยืนในระยะยาวของโครงการ
ต่อไปนี้เป็นพื้นฐานเพิ่มเติมเกี่ยวกับสาเหตุที่ GPL ตามที่อธิบายไว้ใน Discourse: https://meta.discourse.org/t/why-gnu-license/2531 หลายประเด็นที่กล่าวถึงนั้นตรงใจเรา
ตอนนี้สิ่งที่กล่าวมาทั้งหมดใช้กับเซิร์ฟเวอร์ Typesense เท่านั้น ไลบรารีไคลเอนต์ของเราตั้งใจที่จะรวมเข้ากับโค้ดของผู้ใช้ของเรา ดังนั้นพวกเขาจึงใช้ลิขสิทธิ์ Apache
โดยสรุป AGPL คือสิ่งที่มักเป็นปัญหาสำหรับซอฟต์แวร์เซิร์ฟเวอร์ และเราเลือกที่จะไม่ใช้มัน เราเชื่อว่า GPL สำหรับ Typesense Server รวบรวมสาระสำคัญของสิ่งที่เราต้องการสำหรับโปรเจ็กต์โอเพ่นซอร์สนี้ GPL มีประวัติอันยาวนานในการประสบความสำเร็จในการใช้งานโดยโครงการโอเพ่นซอร์สยอดนิยม ห้องสมุดของเรายังคงได้รับลิขสิทธิ์จาก Apache
หากคุณมีข้อมูลเฉพาะที่ขัดขวางไม่ให้คุณใช้ Typesense เนื่องจากปัญหาด้านลิขสิทธิ์ เรายินดีที่จะสำรวจหัวข้อนี้เพิ่มเติมกับคุณ โปรดติดต่อเรา
หากคุณมีคำถามทั่วไปเกี่ยวกับ Typesense ต้องการทักทายหรือเพียงติดตาม เราขอเชิญคุณเข้าร่วมชุมชน Slack สาธารณะของเรา
หากคุณประสบปัญหาใดๆ โปรดสร้างปัญหา GitHub แล้วเราจะพยายามช่วยเหลืออย่างเต็มที่
เรามุ่งมั่นที่จะให้การสนับสนุนที่ดีผ่านเครื่องมือติดตามปัญหาของเราบน GitHub อย่างไรก็ตาม หากคุณต้องการรับการสนับสนุนแบบส่วนตัวและแบบจัดลำดับความสำคัญด้วย:
เรามีตัวเลือกการสนับสนุนแบบชำระเงินตามที่อธิบายไว้ที่นี่
เราเป็นทีมที่มีพันธกิจเพื่อทำให้การค้นหาเป็นประชาธิปไตย และเราจะรับความช่วยเหลือทั้งหมดที่เราสามารถทำได้! หากคุณต้องการมีส่วนร่วม ข้อมูลต่อไปนี้เกี่ยวกับจุดที่เราจะช่วยคุณได้: Contributing.md
หากคุณต้องการรับข้อมูลอัปเดตเมื่อเราเปิดตัวเวอร์ชันใหม่ ให้คลิกที่ปุ่ม "รับชม" ที่ด้านบนและเลือก "เผยแพร่เท่านั้น" จากนั้น GitHub จะส่งการแจ้งเตือนถึงคุณพร้อมกับบันทึกการเปลี่ยนแปลงในการเปิดตัวใหม่แต่ละรายการ
นอกจากนี้เรายังโพสต์การอัปเดตไปยังบัญชี Twitter ของเราเกี่ยวกับการเผยแพร่และหัวข้อเพิ่มเติมที่เกี่ยวข้องกับ Typesense ติดตามเราที่นี่: @typesense
เราจะโพสต์การอัปเดตบนชุมชน Slack ของเราด้วย
เราใช้ Bazel เพื่อสร้าง Typesense
Typesense ต้องการการพึ่งพาดังต่อไปนี้:
โปรดดูขั้นตอนการสร้าง CI สำหรับชุดการขึ้นต่อกันล่าสุด
เมื่อคุณติดตั้งแล้ว ให้รันสิ่งต่อไปนี้จากรากของ repo:
bazel build //:typesense-server
การสร้างครั้งแรกจะใช้เวลาสักระยะหนึ่งเนื่องจากไลบรารีของบุคคลที่สามอื่นๆ ถูกดึงและสร้างโดยเป็นส่วนหนึ่งของกระบวนการสร้าง
© 2016-ปัจจุบัน Typesense Inc.