Score:4

ฉันจะเพิ่มการสืบค้นการค้นหา search_api_solr ได้อย่างไรหากฟิลด์มีค่า

ธง in

ฉันกำลังพยายามเพิ่มการเพิ่มประสิทธิภาพให้กับการค้นหา api Solr เมื่อฟิลด์มีค่าเฉพาะ เช่น เมื่อ nid = 123 กำลังดู Solr เวอร์ชัน 8.7 เอกสารสำหรับการเพิ่มประสิทธิภาพ (เวอร์ชันเซิร์ฟเวอร์ solr ของฉัน) มันดูค่อนข้างตรงไปตรงมา ฉันแค่ต้องเพิ่มพารามิเตอร์ bq เช่น:

bq=นิด:123^10

เมื่อฉันไปที่ UI ผู้ดูแลระบบของเซิร์ฟเวอร์ Solr และเพิ่มคิวรีที่นั่น - ก่อนอื่นให้เลือกช่องทำเครื่องหมายตัวแยกวิเคราะห์ edismax แล้วจึงเพิ่ม นิด:123^10 ลงในฟิลด์ bq - ฉันเห็นผลลัพธ์โดยที่โหนดของฉันที่มี nid อยู่ที่ด้านบนสุดของรายการ (ตามที่ฉันคาดไว้) พร้อมกับผลลัพธ์อื่นๆ ทั้งหมดหลังจากนั้น หากฉันลบตัวเลือก โหนดของฉันที่มี nid 123 จะไม่อยู่ด้านบนอีกต่อไป (อย่างที่ฉันคาดไว้)

เดอะ ค้นหา_api_solr โมดูลจัดเตรียม hook เพื่อแก้ไขแบบสอบถาม hook_search_api_solr_query_alter()ที่ฉันสามารถเพิ่มบูสต์ของฉันได้ (หมายเหตุด้านข้าง ฉันเคยใช้เบ็ดนี้ในอดีตเพื่อเพิ่มผลลัพธ์ตามวันที่โดยพื้นฐานแล้วตามที่ระบุไว้ในเอกสารนี้ ความคิดเห็น bkosborne.)

ความเข้าใจของฉันคือฉันควรจะสามารถดำเนินการบางอย่างเช่น:

ฟังก์ชัน 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');
}

อย่างไรก็ตาม สิ่งนี้ไม่มีผลกระทบต่อคะแนนความเกี่ยวข้องของผลลัพธ์ของฉัน (ฉันกำลังพิมพ์คะแนนความเกี่ยวข้องในมุมมองของฉัน และโหนดของฉันที่มี nid 123 มีคะแนนเท่ากันไม่ว่าฉันจะเพิ่มพารามิเตอร์นี้หรือไม่ก็ตาม) และลำดับของ ผลลัพธ์

ฉันพลาดอะไรไปที่นี่?

ข้อมูลเวอร์ชัน:

  • แกน Drupal: 9.1.10
  • ค้นหา API: 8.x-1.19
  • ค้นหา API Solr: 4.1.12
  • เซิร์ฟเวอร์ Solr: 8.7.0

ปล. คีย์ฟิลด์ nid ของฉันเป็นจริง its_nid ในดัชนี แต่ฉันเพิ่งใช้ นิดนึง ในคำถามนี้เพื่อความสะดวกในการอ่าน

Score:5
ธง in

ฉันแค่ต้องอ่านให้ละเอียดมากขึ้น ข้อมูลทั้งหมดอยู่ในโค้ดตัวอย่างใน 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');
}

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา