การค้นหาข้อความฝั่งไคลเอ็นต์แบบเต็มโดยใช้ js-search แต่เพิ่มการสนับสนุนผู้ปฏิบัติงานบนเว็บเพื่อประสิทธิภาพที่ดีขึ้น
ตรวจสอบการค้นหา redux สำหรับการรวมตัวอย่าง
หรือติดตั้งด้วยตัวเองด้วย NPM:
npm install --save js-worker-search
แยกจากการค้นหา JS ยูทิลิตี้นี้สร้างดัชนีการค้นหาและดำเนินการค้นหาจริง โดยจะตรวจจับความสามารถของสภาพแวดล้อมปัจจุบันโดยอัตโนมัติ (เบราว์เซอร์หรือโหนด) และใช้การใช้งานบนเว็บเมื่อเป็นไปได้ เมื่อไม่มีการสนับสนุนผู้ปฏิบัติงานบนเว็บ การค้นหาจะเสร็จสิ้นในเธรดหลัก (UI)
SearchApi กำหนดวิธีการสาธารณะดังต่อไปนี้:
constructor ({ caseSensitive, indexMode, tokenizePattern })
ตามค่าเริ่มต้น SearchApi
จะสร้างดัชนีเพื่อให้ตรงกับสตริงย่อยทั้งหมด คุณสามารถแทนที่ลักษณะการทำงานนี้ได้โดยส่งพารามิเตอร์ indexMode
ที่มีชื่อ ค่าที่ถูกต้องคือ INDEX_MODES.ALL_SUBSTRINGS
, INDEX_MODES.EXACT_WORDS
และ INDEX_MODES.PREFIXES
การค้นหาจะคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่โดยค่าเริ่มต้น และแยกตามอักขระช่องว่างทั้งหมด อ่านด้านล่างเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการปรับแต่งตัวเลือกเริ่มต้น
indexDocument (uid, text)
เพิ่มหรืออัปเดต uid ในดัชนีการค้นหาและเชื่อมโยงกับข้อความที่ระบุ โปรดทราบว่าในขณะนี้คุณสามารถเพิ่มหรืออัปเดต uid ในดัชนีเท่านั้น ไม่สามารถลบออกได้
พารามิเตอร์:
search(query)
ค้นหาดัชนีปัจจุบันสำหรับข้อความค้นหาที่ระบุ ยอมรับเฉพาะ uid ที่ตรงกับคำทั้งหมดภายในข้อความเท่านั้นที่จะได้รับการยอมรับ หากมีการระบุสตริงการสืบค้นที่ว่างเปล่า uid ที่จัดทำดัชนีไว้ทั้งหมดจะถูกส่งกลับ
การค้นหาเอกสารไม่ต้องคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (เช่น "การค้นหา" จะตรงกับ "การค้นหา") การค้นหาเอกสารใช้การจับคู่สตริงย่อย (เช่น "na" และ "me" จะตรงกับ "name" ทั้งคู่)
พารามิเตอร์:
วิธีนี้จะส่งคืนอาร์เรย์ของ uids
terminate()
หากการค้นหากำลังทำงานอยู่ในผู้ปฏิบัติงานบนเว็บ การดำเนินการนี้จะยุติการทำงานของผู้ปฏิบัติงานเพื่อให้สามารถรวบรวมขยะได้
ใช้ API ดังนี้:
import SearchApi from 'js-worker-search'
const searchApi = new SearchApi ( )
// Index as many objects as you want.
// Objects are identified by an id (the first parameter).
// Each Object can be indexed multiple times (once per string of related text).
searchApi . indexDocument ( 'foo' , 'Text describing an Object identified as "foo"' )
searchApi . indexDocument ( 'bar' , 'Text describing an Object identified as "bar"' )
// Search for matching documents using the `search` method.
// In this case the promise will be resolved with the Array ['foo', 'bar'].
// This is because the word "describing" appears in both indices.
const promise = searchApi . search ( 'describing' )
ตามค่าเริ่มต้น SearchApi
จะสร้างดัชนีเพื่อให้ตรงกับสตริงย่อยทั้งหมด คุณสามารถแทนที่พฤติกรรมนี้ได้โดยส่งพารามิเตอร์ indexMode
ไปยังตัวสร้างดังนี้:
import SearchApi , { INDEX_MODES } from 'js-worker-search'
// all-substrings match by default; same as current
// eg "c", "ca", "a", "at", "cat" match "cat"
const searchApi = new SearchApi ( )
// prefix matching (eg "c", "ca", "cat" match "cat")
const searchApi = new SearchApi ( {
indexMode : INDEX_MODES . PREFIXES
} )
// exact words matching (eg only "cat" matches "cat")
const searchApi = new SearchApi ( {
indexMode : INDEX_MODES . EXACT_WORDS
} )
ตามค่าเริ่มต้น SearchApi
จะแบ่งข้อความเป็นคำ (โทเค็น) โดยใช้ช่องว่างและบรรทัดใหม่เป็นอักขระคั่น หากคุณต้องการจัดเตรียมกฎการแยกของคุณเอง ให้ส่ง RegExp ไปยังตัวสร้างที่กำหนดรูปแบบ เช่น:
// Custom tokenizer pattern to include all non alphanumerics as delimeters
// ex: searching "Swift" matches "Thomas Swift" and "Thomas (Swift)" but not "swiftly tilting"
const searchApi = new SearchApi ( {
indexMode : INDEX_MODES . EXACT_WORDS ,
tokenizePattern : / [^a-z0-9]+ / ,
} )
โปรแกรมฆ่าเชื้อเริ่มต้นจะทำการค้นหาโดยคำนึงถึงขนาดตัวพิมพ์ หากคุณต้องการแทนที่พฤติกรรมนั้นและทำการค้นหาโดยคำนึงถึงตัวพิมพ์เล็กและใหญ่ ให้ตั้งค่าบิต caseSensitive ให้เป็นจริง ดังนี้:
// custom sanitizer for case-sensitive searches
const searchApi = new SearchApi ( {
caseSensitive : true
} )
ตามค่าเริ่มต้น ยูทิลิตีการค้นหาจะส่งคืนเฉพาะเอกสารที่มีโทเค็นการค้นหาทั้งหมดเท่านั้น สามารถกำหนดค่าให้ส่งคืนเอกสารที่มีโทเค็นการค้นหาได้
// Change search behavior from AND to OR
const searchApi = new SearchApi ( {
matchAnyToken : true
} )
ติดตามการเปลี่ยนแปลงในบันทึกการเปลี่ยนแปลง
js-worker-search มีอยู่ภายใต้ใบอนุญาต MIT