ฉันใช้ API การค้นหากับแบ็กเอนด์ฐานข้อมูลบนไซต์ Drupal 9.3.3
ฉันได้จัดทำดัชนี 26,000 โหนดของประเภทเนื้อหาที่กำหนดเอง ซึ่งรวมถึงฟิลด์วันที่ที่กำหนดเอง: field_display_date
ดัชนีถูกตั้งค่าให้แสดงผล html เนื่องจากฉันต้องการให้ผู้ใช้สามารถเรียงลำดับ field_display_date (จากมากไปน้อย) เช่นเดียวกับความเกี่ยวข้อง ฉันจึงได้เปิดเผยสองประเภท: ความเกี่ยวข้องและวันที่ (โดยใช้ฟิลด์วันที่ที่กำหนดเองนี้) และได้เพิ่ม field_display_date ลงในดัชนีในรูปแบบ "วันที่"
เป้าหมายสูงสุดคือการได้รับผลการค้นหาที่มีความเกี่ยวข้องสูง แต่สามารถจัดเรียงเพื่อดูผลการค้นหาที่มีความเกี่ยวข้องสูงล่าสุดได้ อาจมีวิธีที่แตกต่างไปจากเดิมอย่างสิ้นเชิง
ปัญหา: เมื่อดูการตั้งค่าทั้งหมดแล้ว ให้ป้อนคำค้นหาว่าดำเนินการ ด้วยการตั้งค่าการจัดเรียงเป็นค่าเริ่มต้น 'ความเกี่ยวข้อง' การส่งคืนจึงค่อนข้างรวดเร็ว หากฉันเปลี่ยนการจัดเรียงเป็น 'วันที่' (field_display_date: มากไปหาน้อย) และส่งอีกครั้ง จะมีเวลารอนานมาก ซึ่งมักจะหมดเวลาของเกตเวย์
ในอันที่ไม่หมดเวลา view sql และการลดประสิทธิภาพบอกว่านี่...
สอบถาม
ดัชนี: main2
คีย์: 'ทดสอบ'
คีย์แยกวิเคราะห์: อาร์เรย์ (
'#conjunction' => 'และ',
0 => 'ทดสอบ',
)
ฟิลด์ที่ค้นหา: rendered_item, ชื่อเรื่อง
การเรียงลำดับ: field_display_date DESC
ตัวเลือก: อาร์เรย์ (
'search_api_view' => 'วัตถุ (Drupal\views\ViewExecutable)',
'search_api_base_path' => 'ค้นหา2',
)
การค้นหาชื่อเรื่อง2
เส้นทาง /search2
เวลาในการสร้างแบบสอบถาม 1.43 ms
เวลาดำเนินการแบบสอบถาม 2.81 ms
ดูเวลาเรนเดอร์ 43237.89 ms
เหตุใดเวลาในการเรนเดอร์จึงสูง และมีความคิดเกี่ยวกับวิธีการแก้ไขหรือไม่ นอกจากนี้ การเปลี่ยนไปใช้ apache solr น่าจะทำงานได้ดีกว่าหรือมีผลลัพธ์เหมือนกันหรือไม่ (เนื่องจากการตั้งค่า solr นั้นดูค่อนข้างเกี่ยวข้องและต้องใช้เวลาพอสมควร จึงอยากทราบว่ามันคุ้มค่าที่จะทำหรือไม่)
ในทางตรงกันข้าม นี่คือมุมมองและดัชนีเดียวกัน และคำค้นหาที่จัดเรียงตามความเกี่ยวข้อง...
สอบถาม
ดัชนี: main2
คีย์: 'ทดสอบ'
คีย์แยกวิเคราะห์: อาร์เรย์ (
'#conjunction' => 'และ',
0 => 'ทดสอบ',
)
ฟิลด์ที่ค้นหา: rendered_item, ชื่อเรื่อง
การเรียงลำดับ: search_api_relevance DESC
ตัวเลือก: อาร์เรย์ (
'search_api_view' => 'วัตถุ (Drupal\views\ViewExecutable)',
'search_api_base_path' => 'ค้นหา2',
)
การค้นหาชื่อเรื่อง2
เส้นทาง /search2
เวลาในการสร้างแบบสอบถาม 1.23 ms
เวลาดำเนินการแบบสอบถาม 2.68 ms
ดูเวลาเรนเดอร์ 2990.91 ms
สิ่งนี้ดูเหมือนจะแนะนำว่าการค้นหาเองและรับผลลัพธ์นั้นค่อนข้างรวดเร็ว แต่ด้วยเหตุผลบางอย่างที่โหลดหน้าเว็บช้ามาก?
สิ่งที่น่าสนใจคือ การข้าม API การค้นหาทั้งหมดและเพียงแค่เพิ่มช่องเนื้อหาลงในมุมมองปกติ และการค้นหาด้วยคีย์เวิร์ดจะได้ผลลัพธ์ที่เร็วขึ้น ซึ่งทำให้ฉันคิดว่าฉันทำบางอย่างไม่ถูกต้องในระดับพื้นฐาน
ตัวกรองมุมมองธรรมดาที่ไม่มีดัชนี เรียงตาม field_display_date จากมากไปน้อย ค้นหาฟิลด์เนื้อหาสำหรับคำหลักเดียวกัน...
ชื่อเรื่อง เนื้อหา
พาธ /admin/content/node2
เวลาในการสร้างแบบสอบถาม 3.23 ms
เวลาดำเนินการแบบสอบถาม 1.2 ms
ดูเวลาเรนเดอร์ 6291.28 ms