นี่คือปลั๊กอินการค้นหาข้อความแบบเต็มรูปแบบที่สร้างขึ้นบน tantivy
Tantivy เป็นไลบรารีเครื่องมือค้นหาแบบเต็มข้อความที่ได้รับแรงบันดาลใจจาก Apache Lucene และเขียนด้วย Rust
สคีมาอธิบายประเภท (สตริงข้อความ u64) ของฟิลด์เช่นเดียวกับวิธีการจัดการ
ประเภทฟิลด์สคีมารองรับ:
| ประเภทฟิลด์ | คำอธิบาย |
|---|---|
| สาย | การกำหนดค่าประเภทฟิลด์สตริง |
| ข้อความ | การกำหนดค่าประเภทฟิลด์ข้อความ |
| U64 | การกำหนดค่าประเภทฟิลด์ 64-bits ที่ไม่ได้ลงชื่อ |
| i64 | จำนวนเต็ม 64 บิตที่ลงนาม 64 การกำหนดค่าประเภทฟิลด์ |
| F64 | 64 บิตลอย 64 การกำหนดค่าประเภทฟิลด์ |
| วันที่ | การกำหนดค่าประเภทฟิลด์วันที่ 64 บิตที่ลงนาม |
| ด้าน | แง่มุม |
| ไบต์ | Bytes (หนึ่งต่อเอกสาร) |
ผู้ประกอบการชอบ และ หรือ จะ ต้องอยู่ ใน ตัวพิมพ์ใหญ่
คำศัพท์ง่ายๆ : "เช่น: บารัคโอบามาเป็นเพียงแค่การใช้งานง่าย ๆ ของ Tantivy ดังนั้นจึงกลายเป็น [" บารัค "," โอบามา "] คำศัพท์นั้นจะถูกค้นหาภายในข้อกำหนดเริ่มต้นของตัวแยกวิเคราะห์แบบสอบถาม
เช่นถ้าร่างกายและชื่อเป็นฟิลด์เริ่มต้นคำศัพท์ตัวอย่างของเราคือ ["ชื่อเรื่อง: บารัค", "Body: Barack", "Title: Obama", "Body: Obama"] โดยค่าเริ่มต้นฟิลด์โทเค็นและดัชนีทั้งหมดเป็นฟิลด์เริ่มต้น
มีการจัดการ หลายคำ เป็น AN หรือ: เอกสารใด ๆ ที่มีอย่างน้อยหนึ่งคำจะผ่านการให้คะแนน
พฤติกรรมนี้ช้าลง แต่ไม่ใช่ความคิดที่ไม่ดีหากผู้ใช้เรียงลำดับตามความเกี่ยวข้อง: โดยทั่วไปผู้ใช้จะสแกนผ่านเอกสารสองสามฉบับแรกเพื่อลดความเกี่ยวข้องและจะหยุดเมื่อเอกสารไม่เกี่ยวข้องอีกต่อไป
ผู้ให้บริการบูลีน : และหรือ และมีความสำคัญกว่าหรือเพื่อให้ A และ B หรือ C ถูกตีความว่าเป็น (A และ B) หรือ C
นอกเหนือจากตัวดำเนินการบูลีนแล้ว -, + สามารถช่วยกำหนดได้ ผู้ให้บริการเหล่านี้เพียงพอที่จะแสดงการสืบค้นทั้งหมดโดยใช้ตัวดำเนินการบูลีน ตัวอย่างเช่น x และ y หรือ z สามารถเขียน (( +x +y) z) นอกจากนี้ผู้ให้บริการเหล่านี้สามารถช่วยกำหนดแบบสอบถาม "ตัวเลือกที่จำเป็น" (+xy) ตรงกับเอกสารที่ตั้งไว้เป็นเพียง X แต่ y จะช่วยปรับแต่งคะแนน
ข้อกำหนดเชิงลบ : โดยการเตรียมคำศัพท์โดย A -คำศัพท์สามารถแยกออกจากการค้นหาได้ สิ่งนี้มีประโยชน์สำหรับการสอบถามแบบสอบถาม เช่นแอปเปิ้ล -ผล
ต้องมีข้อกำหนด : โดยการเตรียมคำศัพท์โดย A +สามารถกำหนดคำศัพท์ได้สำหรับการค้นหา
ข้อกำหนดวลี : คำที่ยกมากลายเป็นการค้นหาวลีบนฟิลด์ที่มีตำแหน่งจัดทำดัชนี เช่นชื่อ: "Barack Obama" จะพบเอกสารที่มี "Barack" ตามด้วย "Obama" ทันที
คำศัพท์ช่วง : การค้นหาช่วงสามารถทำได้โดยการระบุขอบเขตเริ่มต้นและสิ้นสุด สิ่งเหล่านี้สามารถรวมหรือพิเศษ เช่นชื่อเรื่อง: [A ถึง C} จะพบเอกสารทั้งหมดที่มีชื่อมีคำศัพท์คำศัพท์ระหว่าง A และ C (ขอบเขตล่างรวม, ขอบเขตบนสุดพิเศษ) ขอบเขตที่ครอบคลุมคือ [] พิเศษคือ {}
ค่าวันที่ : ตัวแยกวิเคราะห์แบบสอบถามรองรับวันที่จัดรูปแบบ RFC3333 ตัวอย่างเช่น "2002-10-02T15: 00: 00.05Z"
QUARY ทั้งหมด : แบบธรรมดา * จะตรงกับเอกสารทั้งหมดในดัชนี
/// create a instance of SearchEngine and set it up
final engine = SearchEngine ();
SearchEngine . setup ();
/// get the path which used to store index files
final _path = await getApplicationDocumentsDirectory ().path;
/// define the schema of the data which wanted to be indexed
final _schema = r'{"id": "i64", "timestamp": "date", "content": "text"}' ;
/// open a exists one or create a new one on the device
engine. openOrCreate (_path, _schema);
/// encode the data object to a json string
final _doc = jsonEncode (dataObject);
/// start to index and store the data
await engine. index (_doc);
/// give the query keywords and the field which to search on
final res = await engine. search ( '关键字 关键词' , [ 'content' ], 1 , 10 );
/// remove a specify document by giving a field of u64 and it's value
/// document can't be deleted by text field, please use string field
await engine. deleteByU64 ( 'id' , 141906710246850560 );
