it-swarm-id.com

Bagaimana saya bisa mengubah URL pencarian Apache Solr?

Bagaimana saya bisa mengubah jalur URL Apache Solr default dari "search/apachesolr_search/term" menjadi sesuatu yang lain?

12
markdorison

Cara saya biasanya melakukan ini adalah dengan mengimplementasikan hook_menu_alter (). Anda kemudian dapat menyesuaikan url dengan cara yang Anda pilih:

/**
 * Implements hook_menu_alter().
 */
function example_menu_alter(&$menu) {
  // Ensure Apache Solr is the default and that the menu item exists.
  if (variable_get('apachesolr_search_make_default', 0) && isset($menu['search/apachesolr/%menu_tail'])) {
    $menu['search/%menu_tail'] = $menu['search/apachesolr/%menu_tail'];
    unset($menu['search/apachesolr/%menu_tail']);
  }
}
3
q0rban

Ini akan berfungsi jika Anda meletakkannya di settings.php:

function custom_url_rewrite_outbound(&$path, &$options, $original_path) {
  // Filter to get only the Apache solr links with filters so it doesn't launch it for every link of our website
  if ($path == 'search/apachesolr_search/' && strpos($options['query'], 'filters') !== FALSE) {
    $new_path = $path.'?'.urldecode($options['query']);
    // See if we have a url_alias for our new path
    $sql = 'SELECT dst FROM {url_alias} WHERE src="%s"';
    $row = db_result(db_query($sql, $new_path));
    // If there is a dst url_alia, we change the path to it and erase the query
    if ($row) {
      $path = $row;
      $options['query'] = '';
    }
  }
}

function custom_url_rewrite_inbound(&$result, $path, $path_language) {
  // See if we have a url_alias for our new path
  $sql = 'SELECT src FROM {url_alias} WHERE dst="%s"';
  $row = db_result(db_query($sql, $path));
  if ($row) {
    // We found a source path
    $parts = preg_split('/[\?\&]/', $row);
    if (count($parts) > 1) {
      $result = array_shift($parts);
      // That's important because on my website, it doesn't work with the / at the end of result
      if ($result[strlen($result) - 1] == '/') {
        $result = substr($result, 0, strlen($result) - 1);
      }
      // Create the $_GET with the filter
      foreach ($parts as $part) {
        list($key, $value) = explode('=', $part);
        $_GET[$key] = $value;
        // Add this because the pager use the $_REQUEST variable to be set
        $_REQUEST[$key] = $value;
      }
    }
  }
}

Dan kemudian ketika Anda membuat entri menu, Anda meletakkan tautan ke Apache solr: search/apachesolr_search /? Filter = tid: 13

Dan buat alias url untuk pencarian/apachesolr_search /? Filter = tid: 13 like products/tv.html

Ditemukan melalui: http://drupal.org/node/783836#comment-4136475

4
realityloop

Bukan hal yang sepele untuk mengubah jalur pencarian jika Anda hanya menggunakan modul pencarian apachesolr. Karena ini tergantung pada modul pencarian inti, jalur hampir-kode keras. Itu tergantung pada search/{module} /% menu_tail. Jika Anda melihat search_view () , panggilan balik untuk modul pencarian, Anda akan menemukan bahwa ia memanggil search_get_keys () , yang mengharapkan kunci pencarian berada pada khususnya bagian dari jalan. Modul pencarian apachesolr juga menggunakan fungsi ini untuk mendapatkan kunci, jadi mengimplementasikan hook_menu_alter () yang sederhana tidak akan berfungsi dengan sendirinya.

Seperti disebutkan dalam jawaban lain di sini, jika Anda dapat menjalankan Tampilan 3.x, maka taruhan terbaik Anda adalah menggunakan modul tampilan apachesolr . Dengan modul ini, Anda dapat dengan mudah menentukan sejumlah jalur khusus untuk hasil pencarian.

Jika Anda tidak dapat menjalankan 3.x, maka Anda harus menggunakan kombinasi perubahan bentuk (khususnya, search_form) dan panggilan balik menu khusus untuk berhasil mengubah jalur pencarian default.

4
jhedstrom

Anda dapat menggunakan tampilan pertama untuk pencarian situs Anda.

  1. Buat tampilan solr.
  2. Tambahkan tampilan halaman dengan jalur yang Anda inginkan
  3. Tambahkan teks pencarian sebagai filter.
  4. Formulir terbuka di blok
  5. Letakkan blok di tempat yang Anda inginkan kotak pencarian Anda.
3
Jeremy French

Lihat Menambahkan jalur pencarian khusus dengan hook_men oleh orang-orang di Evolving Web. Itu berbicara tentang bagaimana mereka menulis modul khusus untuk membuat URL ramah untuk pencarian Solr mereka. Anda mungkin perlu sedikit Tweak, tapi itu adalah titik awal yang baik.

2
Benedict Steele

Atau Anda dapat memodifikasi modul yang berkontribusi yang melakukan ini: Apache Solr Custom Path .

1
Ivan Alfaro

Bagaimana dengan membuat panggilan balik menu baru seperti berikut untuk membuat hasil pengembalian apachesolr di jalur itu?

$menu['search']['page callback'] = 'apachesolr_search_view';
1
markdorison

Jika Anda hanya ingin mengubah pencarian/apachesolr_search/ke sesuatu yang lain, misalnya 'inventaris', Anda dapat mencoba modul Global redirect .

Caranya adalah dengan membuat 2 alias - satu untuk pencarian/apachesolr_search/(untuk item faceted) dan yang lainnya tanpa trailing slash (untuk halaman pencarian utama). Pengalihan global mungkin menolak untuk membuat 2 alias untuk tujuan yang sama, tetapi Anda dapat memasukkannya ke db secara langsung.

0
gansbrest