ฉันแค่ต้องอ่านให้ละเอียดมากขึ้น ข้อมูลทั้งหมดอยู่ในโค้ดตัวอย่างใน hook_search_api_solr_query_alter() เอกสาร (ฉันคิดว่ารูปแบบที่ฉันใช้อาจได้รับการแนะนำสำหรับ search_api_solr เวอร์ชันเก่ากว่ามาก ซึ่งเป็นเวอร์ชันที่เพิ่งไม่จำเป็นอีกต่อไปในโฮสต์ขององค์กรบางแห่ง)
วิธีที่ง่ายที่สุดในการทำให้สิ่งนี้ใช้งานได้คือการเพิ่มพารามิเตอร์ defType ในแบบสอบถามของฉันเพื่อบอกให้ใช้ตัวแยกวิเคราะห์ edismax นี่คือเอกสารใน hook_search_api_solr_query_alter(). ผลงานต่อไปนี้:
ฟังก์ชัน MY_MODULE_search_api_solr_query_alter(\Solarium\Core\Query\QueryInterface $solarium_query, \Drupal\search_api\Query\QueryInterface $query) {
$solarium_query->addParam('bq', 'nid:123^10');
// หลีกเลี่ยงการแปลงเป็นนิพจน์แยกวิเคราะห์ lucene, เก็บ edismax
$solarium_query->addParam('defType', 'edismax');
}
อย่างไรก็ตามการอ่าน ขอเอกสารจะแสดงแนวทางอื่นที่น่าจะดีกว่า:
ฟังก์ชัน MY_MODULE_search_api_solr_query_alter(\Solarium\Core\Query\QueryInterface $solarium_query, \Drupal\search_api\Query\QueryInterface $query) {
$boost_queries['พิเศษ_node'] = [
'query' => 'nid:123^10.0',
];
$boost_queries['some_less_special_node'] = [
'query' => 'nid:321^5.0',
];
/** @var \Solarium\Component\EdisMax $edismax */
$edismax = $solarium_query->getEDisMax();
$edismax->addBoostQueries($boost_queries);
// หลีกเลี่ยงการแปลงเป็นนิพจน์แยกวิเคราะห์ lucene, เก็บ edismax
$solarium_query->addParam('defType', 'edismax');
}