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)

สิ่งนี้จะจับทั้งคำจนกว่าจะพบตัวอักษรที่ไม่ใช่ตัวอักษร