Điểm:4

Làm cách nào tôi có thể thêm tăng cường cho truy vấn search_api_solr nếu trường có giá trị?

lá cờ in

Tôi đang cố gắng thêm một mức tăng cho truy vấn api Solr tìm kiếm khi một trường có một giá trị cụ thể, ví dụ: khi nid = 123. Nhìn vào Tài liệu Solr phiên bản 8.7 để tăng cường (phiên bản máy chủ solr của tôi), điều này có vẻ khá đơn giản. Tôi chỉ cần thêm một tham số bq như:

bq=nid:123^10

Khi tôi truy cập giao diện người dùng quản trị máy chủ Solr của mình và thêm truy vấn vào đó - trước tiên hãy kiểm tra hộp kiểm trình phân tích cú pháp edismax, sau đó thêm không:123^10 vào trường bq - Tôi thấy các kết quả trong đó nút của tôi có nid nằm ở đầu danh sách (như tôi mong đợi) với tất cả các kết quả khác sau nó. Nếu tôi xóa tùy chọn này, nút của tôi với nid 123 không còn ở trên cùng (cũng như tôi mong đợi).

Các search_api_solr mô-đun cung cấp một cái móc để thay đổi truy vấn, hook_search_api_solr_query_alter(), nơi tôi có thể thêm tăng cường của mình. (Lưu ý bên lề, trước đây tôi đã sử dụng hook này để tăng kết quả dựa trên ngày về cơ bản như được ghi lại trong tài liệu này bình luận bkosborne.)

Sự hiểu biết của tôi là tôi sẽ có thể thực hiện một cái gì đó như:

function 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');
}

Tuy nhiên, điều này không ảnh hưởng đến điểm số liên quan trong kết quả của tôi (tôi đang in điểm số liên quan trong chế độ xem của mình và nút của tôi với nid 123 có cùng số điểm cho dù tôi có thêm tham số này hay không), cũng như thứ tự có thể dự đoán được. kết quả.

Tôi đang thiếu gì ở đây?

Thông tin phiên bản:

  • Lõi Drupal: 9.1.10
  • API tìm kiếm: 8.x-1.19
  • API tìm kiếm Solr: 4.1.12
  • Máy chủ Solr: 8.7.0

tái bút khóa trường nid của tôi thực sự là it_nid trong chỉ mục, nhưng tôi chỉ sử dụng không có trong câu hỏi này để dễ đọc.

Điểm:5
lá cờ in

Tôi chỉ cần đọc kỹ hơn. Tất cả thông tin đều có trong mã ví dụ trong hook_search_api_solr_query_alter() tài liệu. (Tôi nghĩ rằng định dạng tôi đang sử dụng có thể đã được đề xuất cho các phiên bản search_api_solr cũ hơn nhiều, các phiên bản gần đây không còn cần thiết trên một số máy chủ doanh nghiệp nhất định.)

Cách đơn giản nhất để làm việc này là thêm tham số defType vào truy vấn của tôi để yêu cầu nó sử dụng trình phân tích cú pháp edismax. Điều này được ghi lại trong hook_search_api_solr_query_alter(). Các công việc sau:

function 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');
  // Tránh chuyển đổi thành biểu thức trình phân tích cú pháp lucene, giữ nguyên edismax.
  $solarium_query->addParam('defType', 'edismax');
}

Tuy nhiên, đọc các móc tài liệu, nó cho thấy một cách tiếp cận thay thế có vẻ thích hợp hơn:

function MY_MODULE_search_api_solr_query_alter(\Solarium\Core\Query\QueryInterface $solarium_query, \Drupal\search_api\Query\QueryInterface $query) {
  $boost_queries['special_node'] = [
    'truy vấn' => 'không:123^10.0',
  ];
  $boost_queries['some_less_special_node'] = [
    'truy vấn' => 'không:321^5.0',
  ];
  /** @var \Solarium\Component\EdisMax $edismax */
  $edismax = $solarium_query->getEDisMax();

  $edismax->addBoostQueries($boost_queries);

  // Tránh chuyển đổi thành biểu thức trình phân tích cú pháp lucene, giữ nguyên edismax.
  $solarium_query->addParam('defType', 'edismax');
}

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.