ภาษาการค้นหาข้อความแบบเต็มรูปแบบแบบครอสโด้ข้อมูลแบบง่าย ๆ ที่ใช้สำหรับ Java 8+
การค้นหาข้อความแบบเต็มเป็นคุณสมบัติสำคัญของแอปพลิเคชันที่ทันสมัย อย่างไรก็ตามการเก็บข้อมูลที่แตกต่างกันแสดงไวยากรณ์ที่แตกต่างกันสำหรับการค้นหาข้อความแบบเต็มและไวยากรณ์เหล่านี้จำนวนมากไม่เป็นมิตรกับผู้ใช้ ที่เก็บข้อมูลบางแห่งไม่เปิดเผยคุณสมบัติการค้นหาข้อความแบบเต็มเลย! สิ่งนี้ทำให้นักพัฒนาได้ยากที่จะเปิดเผยประสบการณ์การค้นหาผู้ใช้ที่สอดคล้องกัน Litecene เป็นภาษาสืบค้นมาตรฐานที่คุ้นเคยโดยใช้ไวยากรณ์ Lucene ที่มี transpilers ไปยังร้านค้าข้อมูลยอดนิยมเช่น BigQuery ที่ทำให้นักพัฒนาซอฟต์แวร์สามารถเปิดเผยไวยากรณ์การค้นหาที่สอดคล้องและใช้งานง่ายสำหรับผู้ใช้
ส่วนนี้อธิบายไวยากรณ์การค้นหา Litecene ทั่วไป โปรดทราบว่า transpilers ที่แตกต่างกันอาจใช้การค้นหาข้อความสำหรับแบบสอบถามเดียวกันแตกต่างกัน ส่วนนี้อธิบายสิ่งที่ถือเป็นแบบสอบถามที่ถูกต้องและคำจำกัดความเชิงตรรกะของการจับคู่ เอกสารการใช้งาน transpiler แต่ละรายการอย่างชัดเจนว่าการสืบค้นที่ถูกต้องนั้นถูกจับคู่ในที่เก็บข้อมูลที่เกี่ยวข้อง
ตัวอย่างเช่นนี่อาจเป็นแบบสอบถาม Litecene ที่ดีในการระบุโพสต์โซเชียลมีเดียที่กล่าวถึงวิธีการทั่วไปที่ผู้คนใช้สมาร์ทโฟนของพวกเขา:
(smartphone OR "smart phone" OR iphone OR "apple phone" OR android OR "google phone" OR "windows phone" OR "phone app"~8) AND (call OR dial OR app OR surf OR browse OR camera OR picture OR pic OR selfie)
Litecene สนับสนุนประโยคการค้นหาเจ็ดประเภท: คำวลี, รายการ, กลุ่ม, และ, หรือและไม่
คำว่าคำว่าเป็นสตริงที่ไม่ได้อ้างถึงของอักขระที่ไม่ใช่ Whitespace เอกสารการจับคู่จะต้องมีคำที่กำหนด ต่อไปนี้เป็นคำศัพท์ Litecene ที่ถูกต้องทั้งหมด:
helloworldwhat's#selfie@twitterhttps://www.example.com/this/is/a/hyperlink คำว่าประโยคอาจจบลงด้วย Wildcard ( * ) เพื่อระบุการค้นหาคำนำหน้า ในกรณีนี้เอกสารการจับคู่จะต้องมีคำศัพท์ที่มีคำนำหน้าที่กำหนด ต่อไปนี้เป็นคำนำหน้าคำนำหน้า Litecene ที่ถูกต้องทั้งหมด:
developer*what's*https://www.example.com/*ประโยควลีคือสตริงอักขระที่ยกมา เอกสารการจับคู่จะต้องมีข้อกำหนดที่กำหนดไว้ซึ่งกันและกัน ต่อไปนี้เป็นวลี Litecene ที่ถูกต้องทั้งหมด:
"hello, world!""The rain in Spain falls mainly on the plains.""super cool search" คำในประโยควลีสามารถจบลงด้วยไวด์การ์ด ( * ) เพื่อระบุการค้นหาคำนำหน้า ในกรณีนี้เอกสารการจับคู่จะต้องมีข้อกำหนดที่กำหนดพร้อมคำนำหน้าที่กำหนดไว้ข้างๆกัน ต่อไปนี้เป็นวลีวลี Litecene ที่ถูกต้องทั้งหมดพร้อมคำศัพท์ไวด์การ์ด:
"It wa* the best of times""It was the wors* of times" ประโยควลีสามารถติดตามได้ทันทีโดย tilde ( ~ ) และหมายเลขจำนวนเต็มเพื่อระบุการค้นหาความใกล้ชิด ในกรณีนี้เอกสารการจับคู่จะต้องมีข้อกำหนดปกติหรือคำนำหน้าทั้งหมดที่กำหนดภายในจำนวนข้อกำหนดของกันและกันในลำดับใด ๆ ความยาวใกล้เคียงจะต้องมีจำนวนคำในวลีอย่างน้อย ต่อไปนี้เป็นวลีวลี Litecene ที่ถูกต้องโดยมีความใกล้ชิด:
"hello, world!"~8"It wa* the best of times"~10รายการรายการคือการค้นหา Litecene ที่ถูกต้องสองครั้งหรือมากกว่านั้นคั่นด้วยช่องว่าง เอกสารการจับคู่จะต้องตรงกับคำสั่งที่กำหนดในลำดับใด ๆ ต่อไปนี้เป็นวลี Litecene ที่ถูกต้องทั้งหมด:
hello, world!The rain in Spain falls mainly on the plains.engineer* "developer* productivity"~8 ประโยคกลุ่มเป็นประโยคการค้นหา Litcene ที่ถูกต้องอื่น ๆ ที่ล้อมรอบด้วยวงเล็บ ( ) เอกสารการจับคู่จะต้องตรงกับประโยคที่มีอยู่ ต่อไปนี้เป็นข้อ Litecene กลุ่มที่ถูกต้องทั้งหมด:
(hello world)(engineer* "developer* productivity"~10)ส่วนคำสั่งของกลุ่มส่วนใหญ่จะใช้เพื่อชี้แจงแบบสอบถามที่ซับซ้อนที่มีหลายและและอนุประโยค
ประโยคและประโยคเป็นประโยคการค้นหา Litecene ที่ถูกต้องตามด้วยคำหลัก AND ตามด้วยประโยคการค้นหา Litecene อื่น หลายคำ AND สามารถผนวกเข้ากับส่วนเดียวกันและประโยคได้ เอกสารการจับคู่จะต้องตรงกับคำสั่งทั้งหมดที่กำหนด ต่อไปนี้เป็น Litecene และข้อที่ถูกต้องทั้งหมด:
hello AND worldThe rain in Spain falls mainly on the plains AND "My Fair Lady"~8engineer* AND "developer productivity"~10 ข้อหรือประโยคเป็นประโยคการค้นหา Litecene ที่ถูกต้องตามด้วยคำหลัก OR ตามด้วยประโยคการค้นหา Litecene อื่น หลายคำ OR ส่วนสามารถผนวกเข้ากับประโยคเดียวกันหรือประโยค เมื่อใดและและหรือและส่วนคำสั่งถูก interleaved AND ผู้ประกอบการผูกแน่นขึ้น ประโยคกลุ่มสามารถใช้เพื่อทำให้แบบสอบถามชัดเจนขึ้นและเข้าใจง่ายขึ้น เอกสารการจับคู่จะต้องตรงกับประโยคที่กำหนดอย่างน้อยหนึ่งข้อ ต่อไปนี้เป็น Litecene หรือข้อที่ถูกต้องทั้งหมด:
hello OR world"My Fair Lady"~8 OR Pygmalion ประโยคที่ไม่เป็นคำหลัก NOT ตามด้วยประโยคการค้นหา Litecene อื่น เอกสารการจับคู่จะต้อง ไม่ ตรงกับประโยคที่กำหนด ต่อไปนี้เป็น Litcene ที่ถูกต้องทั้งหมดไม่ใช่คำสั่ง:
NOT helloNOT "hello, world!"NOT (engineer* AND "developer productivity"~10) แบ็กเอนด์แบบสอบถามบางตัวไม่อนุญาตให้มีการสืบค้นที่มีเพียง NOT เท่านั้น
สำหรับตัวอย่างของวิธีการใช้ Litecene ในแอปพลิเคชันของคุณโปรดดูที่ ReadMe สำหรับที่เก็บข้อมูลของแอปพลิเคชันของคุณ
การรวมข้อมูลร้านค้าใหม่มีสองส่วน: transpiler แบบสอบถามที่แปลงวัตถุ Query Litecene เป็นไวยากรณ์ดั้งเดิมของร้านค้า และวิธีการเตรียมข้อความในที่เก็บข้อมูลสำหรับการค้นหา องค์ประกอบทั้งสองนี้จะต้องทำงานร่วมกันเพื่อใช้ความหมายการค้นหาที่ถูกต้อง
ตัวอย่างเช่น BigQuery Data Store Integration จะค้นหาตัวอักษรและตัวเลข Latin ASCII เท่านั้น ดังนั้นการสืบค้นจะต้องถูกประมวลผลเพื่อจัดการกับอักขระที่ไม่ได้ทำการค้นหาอย่างเหมาะสมก่อนที่จะสามารถแปลงเป็นภาคแสดง SQL และข้อมูลในที่เก็บข้อมูลจะต้องถูกประมวลผลล่วงหน้าเพื่อกำจัดอักขระที่ไม่ได้ทำการค้นหาและทั้งสองกระบวนการนี้จะต้องทำเช่นนั้น
แบ็กเอนด์การรวมข้อมูลใหม่จะต้องใช้ตัวช่วยในการสร้างท่อวิเคราะห์การสืบค้นที่แนะนำและวิธีการที่แนะนำในการประมวลผลข้อมูลล่วงหน้า
Litecene ใช้ท่อส่งต่อไปนี้เพื่อให้นักพัฒนารวมข้อมูลการรวมการสร้างกฎการประมวลผลที่ซับซ้อนได้อย่างรวดเร็วและง่ายดาย
Litecene ดูข้อความค้นหาทั้งหมดเป็นลำดับของคะแนนรหัส CodePointStream เป็นลำดับของคะแนนรหัสที่สั่งซื้อ Litecene Core มีตัวกรองจุดรหัสต่อไปนี้:
SmartQuotesCodePointFilter - แปลง "คำพูดอัจฉริยะ" เป็น "คำพูดตรง"ตัวกรองจุดรหัสสามารถแมปรหัสหนึ่งจุดไปยังอีกรหัสหนึ่ง แต่ไม่สามารถเพิ่มหรือลบจุดรหัสได้
Litecene ใช้ tokenization เพื่อแปลงจุดรหัสเป็นโทเค็น TokenStream เป็นลำดับของโทเค็นที่สั่งซื้อ Litecene Core มีตัวกรองโทเค็นต่อไปนี้:
LetterNumberTokenFilter แทนที่ตัวละครที่ไม่ใช่ตัวอักษรอัลฟาโนเมอร์ทั้งหมดด้วยช่องว่าง ตัวอักษรและหมายเลขหมวดหมู่ Unicode ใช้เพื่อกำหนดข้อความตัวอักษรและตัวเลขLowercaseTokenFilter - แปลงข้อความทั้งหมดเป็นตัวพิมพ์เล็กNormalizeTokenFilter - ทำการทำให้เป็นมาตรฐาน Unicode NFKD บนข้อความและลบอักขระเครื่องหมาย Unicode ทั้งหมดPrintableAsciiTokenFilter แทนที่อักขระทั้งหมดที่ไม่ได้อยู่ใน 0x20-0x7E ด้วยช่องว่างตัวกรองโทเค็นสามารถทำการเปลี่ยนแปลงข้อความโทเค็นโดยพลการ แต่ไม่สามารถเพิ่มหรือลบโทเค็นได้
Litecene อนุญาตให้มีการแปลงแบบสอบถามโดยพลการโดยใช้ QueryPipeline Litecene Core มีท่อคิวรีต่อไปนี้:
SimplifyQueryFilterPipeline - ปรับโครงสร้างแบบสอบถามเพื่อลบคำว่า "ว่างเปล่า" (เช่นคำที่ไม่มีข้อความ) และทำให้ตรรกะง่ายขึ้น (เช่นผสานที่อยู่ติดกันและแบบสอบถาม) แผนงานของ Litecene มีให้เสมอที่นี่ โปรดอย่าลังเลที่จะเปิดหรือแสดงความคิดเห็นเกี่ยวกับปัญหาหากคุณมีข้อเสนอแนะ!