โดยทั่วไปตัววิเคราะห์ใด ๆ ใน Lucene คือ tokenizer + stemmer + stop-words filter
Tokenizer จะแบ่งข้อความของคุณออกเป็นชิ้น ๆ และเนื่องจากตัววิเคราะห์ที่แตกต่างกันอาจใช้โทเค็นที่แตกต่างกันคุณจึงสามารถรับสตรีมโทเค็นเอาต์พุตที่แตกต่างกันได้เช่นลำดับของกลุ่มข้อความ ตัวอย่างเช่นKeywordAnalyzer
คุณพูดถึงไม่ได้แยกข้อความเลยและใช้ฟิลด์ทั้งหมดเป็นโทเค็นเดียว ในขณะเดียวกันStandardAnalyzer
(และเครื่องวิเคราะห์อื่น ๆ ส่วนใหญ่) ใช้ช่องว่างและเครื่องหมายวรรคตอนเป็นจุดแบ่ง ตัวอย่างเช่นสำหรับวลี "ฉันมีความสุขมาก" มันจะสร้างรายการ ["i", "am", "very", "happy"] (หรืออะไรทำนองนั้น) สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการวิเคราะห์เฉพาะ / tokenizers เห็นของJava เอกสาร
Stemmersใช้เพื่อหาฐานของคำที่เป็นปัญหา ขึ้นอยู่กับภาษาที่ใช้เป็นอย่างมาก ตัวอย่างเช่นสำหรับวลีก่อนหน้าในภาษาอังกฤษจะมีบางอย่างเช่น ["i", "be", "veri", "happi"] และสำหรับภาษาฝรั่งเศส "Je suis très heureux" ตัววิเคราะห์ภาษาฝรั่งเศสบางประเภท (เช่นSnowballAnalyzer
initialized ด้วย "French") จะสร้าง ["je", "être", "tre", "heur"] แน่นอนว่าหากคุณจะใช้ตัววิเคราะห์ของภาษาหนึ่งเพื่อสร้างข้อความในอีกภาษาหนึ่งจะมีการใช้กฎจากภาษาอื่นและตัวควบคุมอาจให้ผลลัพธ์ที่ไม่ถูกต้อง ไม่ใช่ความล้มเหลวของระบบทั้งหมด แต่ผลการค้นหาอาจมีความแม่นยำน้อยกว่า
KeywordAnalyzer
ไม่ใช้สเตมเมอร์ใด ๆ มันส่งผ่านทุกฟิลด์ที่ไม่มีการแก้ไข ดังนั้นหากคุณกำลังจะค้นหาคำบางคำในข้อความภาษาอังกฤษคุณไม่ควรใช้ตัววิเคราะห์นี้
คำหยุดเป็นคำที่ใช้บ่อยที่สุดและแทบไม่มีประโยชน์ อีกครั้งขึ้นอยู่กับภาษาเป็นอย่างมาก สำหรับภาษาอังกฤษคำเหล่านี้คือ "a", "the", "I", "be", "have" ฯลฯ ตัวกรองคำหยุดจะนำคำเหล่านี้ออกจากสตรีมโทเค็นเพื่อลดเสียงรบกวนในผลการค้นหาในที่สุดวลีของเราก็คือ "I "ฉันมีความสุขมาก" โดยStandardAnalyzer
จะเปลี่ยนเป็นรายการ ["veri", "happi"]
และKeywordAnalyzer
อีกครั้งไม่ทำอะไร ดังนั้นจึงKeywordAnalyzer
ใช้สำหรับสิ่งต่างๆเช่น ID หรือหมายเลขโทรศัพท์ แต่ไม่ใช่สำหรับข้อความปกติ
และสำหรับmaxClauseCount
ข้อยกเว้นของคุณฉันเชื่อว่าคุณจะได้รับมันในการค้นหา ในกรณีนี้ส่วนใหญ่อาจเป็นเพราะคำค้นหาที่ซับซ้อนเกินไป พยายามแบ่งออกเป็นหลาย ๆ แบบสอบถามหรือใช้ฟังก์ชันระดับต่ำมากขึ้น