it-swarm.it

Come posso modificare l'URL di ricerca di Apache Solr?

Come posso cambiare il percorso URL predefinito di Apache Solr da "search/apachesolr_search/term" a qualcos'altro?

12
markdorison

Il modo in cui l'ho fatto di solito è implementare hook_menu_alter (). È quindi possibile personalizzare l'URL esattamente come si sceglie:

/**
 * 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

Questo dovrebbe funzionare se lo metti in 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;
      }
    }
  }
}

E poi quando crei una voce di menu, metti il ​​link ad Apache solr: search/apachesolr_search /? Filters = tid: 13

E crea un alias URL per search/apachesolr_search /? Filters = tid: 13 like products/tv.html

Trovato via: http://drupal.org/node/783836#comment-4136475

4
realityloop

Modificare il percorso di ricerca non è banale se si utilizza solo il modulo di ricerca apachesolr. Poiché dipende dal modulo di ricerca principale, il percorso è quasi codificato. Dipende da search/{module} /% menu_tail. Se guardi search_view () , il callback per il modulo di ricerca, scoprirai che chiama search_get_keys () , che si aspetta che le chiavi di ricerca siano in un particolare parte del percorso. Anche il modulo di ricerca apachesolr utilizza questa funzione per ottenere le chiavi, quindi l'implementazione di un semplice hook_menu_alter () non funzionerà da sola.

Come menzionato in un'altra risposta qui, se sei in grado di eseguire Views 3.x, la soluzione migliore è utilizzare modulo viste apachesolr . Con questo modulo, puoi facilmente definire un numero qualsiasi di percorsi personalizzati per i risultati della ricerca.

Se non è possibile eseguire 3.x, è necessario utilizzare una combinazione di modifica modulo (in particolare, search_form) e richiamate del menu personalizzato per modificare correttamente il percorso di ricerca predefinito.

4
jhedstrom

È possibile utilizzare solr views per la ricerca nel sito.

  1. Crea una vista solr.
  2. Aggiungi una visualizzazione di pagina con il percorso desiderato
  3. Aggiungi il testo di ricerca come filtro.
  4. Forma esposta in blocco
  5. Posiziona il blocco nel punto in cui desideri posizionare la casella di ricerca.
3
Jeremy French

Dai un'occhiata Aggiunta di percorsi di ricerca personalizzati con hook_men dai ragazzi di Evolving Web. Parla di come hanno scritto un modulo personalizzato per creare URL amichevoli per le loro ricerche Solr. Probabilmente dovrai modificarlo un po ', ma è un buon punto di partenza.

2
Benedict Steele

Oppure puoi semplicemente modificare un modulo contributivo che fa questo: Apache Solr Custom Path .

1
Ivan Alfaro

Che ne dici di creare un nuovo callback di menu come il seguente per fare in modo che apachesolr restituisca risultati in quel percorso?

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

Se vuoi solo cambiare ricerca/apachesolr_search/in qualcos'altro, ad esempio "inventario", puoi provare reindirizzamento globale modulo.

Il trucco è creare 2 alias: uno per search/apachesolr_search/(per gli elementi sfaccettati) e un altro senza barra (per la pagina di ricerca principale). Il reindirizzamento globale potrebbe rifiutare di creare 2 alias per la stessa destinazione, ma è possibile inserirlo direttamente nel db.

0
gansbrest