Elasticsearch - การวิเคราะห์
เมื่อแบบสอบถามถูกประมวลผลระหว่างการดำเนินการค้นหาเนื้อหาในดัชนีใด ๆ จะถูกวิเคราะห์โดยโมดูลการวิเคราะห์ โมดูลนี้ประกอบด้วยตัววิเคราะห์โทเค็นตัวกรองโทเค็นและตัวกรอง หากไม่มีการกำหนดตัววิเคราะห์ดังนั้นโดยค่าเริ่มต้นตัววิเคราะห์โทเค็นตัวกรองและโทเค็นในตัวจะได้รับการลงทะเบียนกับโมดูลการวิเคราะห์
ในตัวอย่างต่อไปนี้เราใช้เครื่องวิเคราะห์มาตรฐานซึ่งใช้เมื่อไม่มีการระบุตัววิเคราะห์อื่น มันจะวิเคราะห์ประโยคตามไวยากรณ์และผลิตคำที่ใช้ในประโยค
POST _analyze
{
"analyzer": "standard",
"text": "Today's weather is beautiful"
}
ในการรันโค้ดด้านบนเราจะได้รับคำตอบตามที่แสดงด้านล่าง -
{
"tokens" : [
{
"token" : "today's",
"start_offset" : 0,
"end_offset" : 7,
"type" : "",
"position" : 0
},
{
"token" : "weather",
"start_offset" : 8,
"end_offset" : 15,
"type" : "",
"position" : 1
},
{
"token" : "is",
"start_offset" : 16,
"end_offset" : 18,
"type" : "",
"position" : 2
},
{
"token" : "beautiful",
"start_offset" : 19,
"end_offset" : 28,
"type" : "",
"position" : 3
}
]
}
การกำหนดค่าตัววิเคราะห์มาตรฐาน
เราสามารถกำหนดค่าตัววิเคราะห์มาตรฐานด้วยพารามิเตอร์ต่างๆเพื่อให้ได้ข้อกำหนดที่กำหนดเองของเรา
ในตัวอย่างต่อไปนี้เรากำหนดค่าตัววิเคราะห์มาตรฐานให้มี max_token_length 5
สำหรับสิ่งนี้อันดับแรกเราสร้างดัชนีโดยตัววิเคราะห์ที่มีพารามิเตอร์ max_length_token
PUT index_4_analysis
{
"settings": {
"analysis": {
"analyzer": {
"my_english_analyzer": {
"type": "standard",
"max_token_length": 5,
"stopwords": "_english_"
}
}
}
}
}
ต่อไปเราจะใช้เครื่องวิเคราะห์ด้วยข้อความดังที่แสดงด้านล่าง โปรดทราบว่าโทเค็นไม่ปรากฏขึ้นได้อย่างไรเนื่องจากมีช่องว่างสองช่องในจุดเริ่มต้นและสองช่องว่างในตอนท้าย สำหรับคำว่า“ คือ” จะมีช่องว่างที่จุดเริ่มต้นและเว้นวรรคท้าย เมื่อนำทั้งหมดแล้วมันจะกลายเป็นตัวอักษร 4 ตัวพร้อมช่องว่างและไม่ได้ทำให้เป็นคำ ควรมีอักขระ nonspace อย่างน้อยตอนต้นหรือตอนท้ายเพื่อให้นับเป็นคำ
POST index_4_analysis/_analyze
{
"analyzer": "my_english_analyzer",
"text": "Today's weather is beautiful"
}
ในการรันโค้ดด้านบนเราจะได้รับคำตอบตามที่แสดงด้านล่าง -
{
"tokens" : [
{
"token" : "today",
"start_offset" : 0,
"end_offset" : 5,
"type" : "",
"position" : 0
},
{
"token" : "s",
"start_offset" : 6,
"end_offset" : 7,
"type" : "",
"position" : 1
},
{
"token" : "weath",
"start_offset" : 8,
"end_offset" : 13,
"type" : "",
"position" : 2
},
{
"token" : "er",
"start_offset" : 13,
"end_offset" : 15,
"type" : "",
"position" : 3
},
{
"token" : "beaut",
"start_offset" : 19,
"end_offset" : 24,
"type" : "",
"position" : 5
},
{
"token" : "iful",
"start_offset" : 24,
"end_offset" : 28,
"type" : "",
"position" : 6
}
]
}
รายชื่อเครื่องวิเคราะห์ต่างๆและคำอธิบายมีอยู่ในตารางที่แสดงด้านล่าง -
ส. เลขที่ | เครื่องวิเคราะห์และคำอธิบาย |
---|---|
1 |
Standard analyzer (standard) สามารถตั้งค่าคำหยุดและ max_token_length สำหรับเครื่องวิเคราะห์นี้ได้ โดยค่าเริ่มต้นรายการคำหยุดจะว่างเปล่าและ max_token_length คือ 255 |
2 |
Simple analyzer (simple) เครื่องวิเคราะห์นี้ประกอบด้วยโทเค็นตัวพิมพ์เล็ก |
3 |
Whitespace analyzer (whitespace) เครื่องวิเคราะห์นี้ประกอบด้วยโทเค็นการเว้นวรรค |
4 |
Stop analyzer (stop) สามารถกำหนดค่า stopwords และ stopwords_path ได้ โดยค่าเริ่มต้นคำหยุดเริ่มต้นเป็นคำหยุดภาษาอังกฤษและ stopwords_path มีเส้นทางไปยังไฟล์ข้อความที่มีคำหยุด |
Tokenizers
โทเค็นใช้สำหรับสร้างโทเค็นจากข้อความใน Elasticsearch ข้อความสามารถแบ่งออกเป็นโทเค็นได้โดยคำนึงถึงช่องว่างหรือเครื่องหมายวรรคตอนอื่น ๆ Elasticsearch มีโทเค็นในตัวมากมายซึ่งสามารถใช้ในตัววิเคราะห์แบบกำหนดเองได้
ตัวอย่างของโทเค็นไนเซอร์ที่แบ่งข้อความออกเป็นเงื่อนไขเมื่อใดก็ตามที่พบอักขระที่ไม่ใช่ตัวอักษร แต่จะลดขนาดของคำทั้งหมดลงด้วยแสดงไว้ด้านล่าง -
POST _analyze
{
"tokenizer": "lowercase",
"text": "It Was a Beautiful Weather 5 Days ago."
}
ในการรันโค้ดด้านบนเราจะได้รับคำตอบตามที่แสดงด้านล่าง -
{
"tokens" : [
{
"token" : "it",
"start_offset" : 0,
"end_offset" : 2,
"type" : "word",
"position" : 0
},
{
"token" : "was",
"start_offset" : 3,
"end_offset" : 6,
"type" : "word",
"position" : 1
},
{
"token" : "a",
"start_offset" : 7,
"end_offset" : 8,
"type" : "word",
"position" : 2
},
{
"token" : "beautiful",
"start_offset" : 9,
"end_offset" : 18,
"type" : "word",
"position" : 3
},
{
"token" : "weather",
"start_offset" : 19,
"end_offset" : 26,
"type" : "word",
"position" : 4
},
{
"token" : "days",
"start_offset" : 29,
"end_offset" : 33,
"type" : "word",
"position" : 5
},
{
"token" : "ago",
"start_offset" : 34,
"end_offset" : 37,
"type" : "word",
"position" : 6
}
]
}
รายการ Tokenizers และคำอธิบายแสดงไว้ที่นี่ในตารางด้านล่าง -
ส. เลขที่ | Tokenizer และคำอธิบาย |
---|---|
1 |
Standard tokenizer (standard) สิ่งนี้สร้างขึ้นจากโทเค็นไนเซอร์ที่ใช้ไวยากรณ์และสามารถกำหนดค่า max_token_length สำหรับโทเค็นไนเซอร์นี้ได้ |
2 |
Edge NGram tokenizer (edgeNGram) สามารถตั้งค่าเช่น min_gram, max_gram, token_chars สำหรับโทเค็นนี้ได้ |
3 |
Keyword tokenizer (keyword) สิ่งนี้สร้างอินพุตทั้งหมดเป็นเอาต์พุตและสามารถตั้งค่า buffer_size สำหรับสิ่งนี้ |
4 |
Letter tokenizer (letter) สิ่งนี้จะจับทั้งคำจนกว่าจะพบตัวอักษรที่ไม่ใช่ตัวอักษร |