it-swarm.com.de

Wie kann ich die Apache Solr-Such-URL ändern?

Wie kann ich den Standard-URL-Pfad von Apache Solr von "search/apachesolr_search/term" in etwas anderes ändern?

12
markdorison

Normalerweise habe ich dazu hook_menu_alter () implementiert. Sie können die URL dann genau so anpassen, wie Sie es möchten:

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

Dies sollte funktionieren, wenn Sie es in settings.php platzieren:

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;
      }
    }
  }
}

Und wenn Sie dann einen Menüeintrag erstellen, setzen Sie den Link zu Apache solr: search/apachesolr_search /? Filters = tid: 13

Und erstellen Sie einen URL-Alias ​​für search/apachesolr_search /? Filters = tid: 13 like products/tv.html

Gefunden über: http://drupal.org/node/783836#comment-4136475

4
realityloop

Es ist nicht trivial, den Suchpfad zu ändern, wenn Sie nur das Suchmodul apachesolr verwenden. Da dies vom Kernsuchmodul abhängt, ist der Pfad nahezu fest codiert. Dies hängt von der Suche/{module} /% menu_tail ab. Wenn Sie sich search_view () , den Rückruf für das Suchmodul, ansehen, werden Sie feststellen, dass es search_get_keys () aufruft, was erwartet, dass sich die Suchschlüssel in einem bestimmten befinden Teil des Weges. Das Apachesolr-Suchmodul verwendet diese Funktion auch, um Schlüssel abzurufen, sodass die Implementierung eines einfachen hook_menu_alter () nicht von alleine funktioniert.

Wie in einer anderen Antwort hier erwähnt, ist es am besten, wenn Sie Views 3.x ausführen können, das Modul apachesolr views zu verwenden. Mit diesem Modul können Sie einfach eine beliebige Anzahl von benutzerdefinierten Pfaden für Suchergebnisse definieren.

Wenn Sie 3.x nicht ausführen können, müssen Sie eine Kombination aus Formularänderung (insbesondere search_form) und benutzerdefinierten Menürückrufen verwenden, um den Standardsuchpfad erfolgreich zu ändern.

4
jhedstrom

Sie können solr views für Ihre Site-Suche verwenden.

  1. Erstellen Sie eine Solr-Ansicht.
  2. Fügen Sie eine Seitenanzeige mit dem gewünschten Pfad hinzu
  3. Fügen Sie Suchtext als Filter hinzu.
  4. Freiliegende Form im Block
  5. Platzieren Sie den Block dort, wo Ihr Suchfeld angezeigt werden soll.
3
Jeremy French

Check out Hinzufügen von benutzerdefinierten Suchpfaden mit hook_men von den Jungs von Evolving Web. Es geht darum, wie sie ein benutzerdefiniertes Modul geschrieben haben, um benutzerfreundliche URLs für ihre Solr-Suche zu erstellen. Sie müssen es wahrscheinlich ein wenig optimieren, aber es ist ein guter Ausgangspunkt.

2
Benedict Steele

Oder Sie können einfach ein beigetragenes Modul ändern, das dies tut: Apache Solr Custom Path .

1
Ivan Alfaro

Was ist mit dem Erstellen eines neuen Menü-Rückrufs wie dem folgenden, damit Apachesolr auf diesem Pfad Ergebnisse zurückgibt?

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

Wenn Sie search/apachesolr_search/nur in etwas anderes ändern möchten, z. B. 'Inventar', können Sie das Modul Global Redirect ausprobieren.

Der Trick besteht darin, zwei Aliase zu erstellen - einen für search/apachesolr_search/(für facettierte Elemente) und einen ohne abschließenden Schrägstrich (für die Hauptsuchseite). Die globale Umleitung weigert sich möglicherweise, zwei Aliase für dasselbe Ziel zu erstellen, aber Sie können sie direkt in die Datenbank einfügen.

0
gansbrest