Tôi đang sử dụng Solr backend cho search_api trên một trang web drupal 8.
Tôi đã thêm giá trị của trường tham chiếu thuật ngữ phân loại ( field_promoted_search
) vào chỉ mục.
Nếu một mục nội dung có field_promoted_search
giá trị khớp với cụm từ tìm kiếm, tôi muốn nó có được mức tăng đáng kể (ví dụ ^ 1000), đẩy nó lên đầu kết quả tìm kiếm.
Thêm giá trị 'boost' cao admin/config/search/search-api/index/content/fields
hoạt động như mong đợi khi máy chủ đang sử dụng solr <6, nhưng kể từ khi chuyển sang 6.1.0, điều này không hoạt động như mong đợi. Điều này có thể là do search_api_solr / solarium đang sử dụng tăng cấp nhân chứ không phải phụ gia . Điều này có vẻ không hữu ích đối với tôi vì điều này nhân lên sự liên quan đạt được bởi các lĩnh vực khác, thay vì chỉ là đặc quyền field_promoted_search
, mặc dù tôi không chắc chắn về khía cạnh này.
Tôi đã thử thêm truy vấn tăng cho trường tìm kiếm được quảng cáo này vào truy vấn solarium bằng cách sử dụng hook_search_api_solr_query_alter
. Điều này yêu cầu tôi chuyển từng khóa tìm kiếm dưới dạng truy vấn được tăng cường và hiệu ứng dường như bị ảnh hưởng bởi thứ tự của các khóa (và kết quả của tôi không kết thúc ở trên cùng).
$keys = $query->getKeys();
unset($keys['#conjunction']);
// Boost results where search term matches promoted search field.
$boost_keys = [];
$boost_value = 1000;
foreach ($keys as $key) {
$boost_keys[] = '"' . $key . '"^' . $boost_value;
}
$solarium_query->getEDisMax()->setBoostQuery('ss_promoted_search:' . implode(' OR ', $boost_keys));
Khi tôi cố gắng sử dụng chức năng tăng thay thế, tôi gặp lỗi từ Solr và truy vấn không chạy (tôi đã thử một số chức năng).
// Format is: "funcA(arg1,arg2)^1.2 funcB(arg3,arg4)^2.2"
$solarium_query->getEDisMax()->setBoostFunctions("ord(ss_promoted_search,1)^1000");
Lời khuyên nào cũng đánh giá cao.
Tài liệu tham khảo của tôi cho các phương pháp tăng phụ gia và nhân lên là bài viết rất hữu ích này .