it-swarm-eu.dev

Jak mohu změnit vyhledávací adresu Apache Solr?

Jak mohu změnit výchozí cestu URL Apache Solr z „search/apachesolr_search/term“ na něco jiného?

12
markdorison

Obvykle jsem to provedl implementací hook_menu_alter (). Poté si můžete adresu URL přizpůsobit přesně podle svého výběru:

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

To by mělo fungovat, pokud je umístíte do 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;
      }
    }
  }
}

A když vytvoříte položku nabídky, umístíte odkaz na Apache solr: search/apachesolr_search /? Filters = tid: 13

A vytvořte alias URL pro vyhledávání/apachesolr_search /? Filtry = tid: 13 jako produkty/tv.html

Nalezeno prostřednictvím: http://drupal.org/node/783836#comment-4136475

4
realityloop

Není triviální změnit cestu hledání, pokud používáte pouze vyhledávací modul apachesolr. Protože záleží na jádru vyhledávacího modulu, cesta je téměř pevně zakódována. Závisí to na vyhledávání/{module} /% menu_tail. Pokud se podíváte na search_view () , zpětné volání vyhledávacího modulu, zjistíte, že volá search_get_keys () , což očekává, že vyhledávací klávesy budou v určité část cesty. Vyhledávací modul apachesolr také používá tuto funkci k získání klíčů, takže implementace jednoduchého hook_menu_alter () nebude fungovat sama o sobě.

Jak je uvedeno v jiné odpovědi zde, pokud jste schopni spustit Zobrazení 3.x, pak je nejlepší použít modul zobrazení apachesolr . Pomocí tohoto modulu můžete snadno definovat libovolný počet vlastních cest pro výsledky vyhledávání.

Pokud nemůžete spustit 3.x, budete muset pro úspěšnou změnu výchozí vyhledávací cesty použít kombinaci změn formy (konkrétně search_form) a vlastních zpětných volání z nabídky.

4
jhedstrom

Můžete použít zobrazení solr pro vyhledávání na vašem webu.

  1. Vytvořte solr pohled.
  2. Přidejte zobrazení stránky s požadovanou cestou
  3. Přidejte hledaný text jako filtr.
  4. Odkrytá forma v bloku
  5. Vložte blok, kam chcete, aby vaše vyhledávací pole jít.
3
Jeremy French

Vyzkoušejte Přidání vlastních vyhledávacích cest pomocí hook_men chlapi na Evolving Webu. Hovoří o tom, jak napsali vlastní modul k vytvoření přátelských adres URL pro jejich vyhledávání v Solru. Pravděpodobně budete muset trochu vylepšit, ale je to dobrý výchozí bod.

2
Benedict Steele

Nebo můžete jen upravit modul, který to udělá: Apache Solr Custom Path .

1
Ivan Alfaro

A co vytvoření nového zpětného volání nabídky, jako je následující, aby apachesolr vrátil výsledky na této cestě?

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

Pokud chcete změnit hledání/apachesolr_search/na něco jiného, ​​například 'inventář', můžete zkusit globální přesměrování modul.

Trik je vytvořit 2 aliasy - jeden pro vyhledávání/apachesolr_search/(pro fazetované položky) a druhý bez koncového lomítka (pro hlavní stránku vyhledávání). Globální přesměrování může odmítnout vytvořit 2 aliasy pro stejný cíl, ale můžete je vložit přímo do db.

0
gansbrest