it-swarm-es.com

¿Cómo puedo cambiar la URL de búsqueda de Apache Solr?

¿Cómo puedo cambiar la ruta de URL predeterminada de Apache Solr de "search/apachesolr_search/term" a otra?

12
markdorison

La forma en que lo he hecho normalmente es implementar hook_menu_alter (). Luego puede personalizar la URL de la manera exacta que elija:

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

Esto debería funcionar si lo coloca en 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;
      }
    }
  }
}

Y luego, cuando crea una entrada de menú, coloca el enlace a Apache solr: search/apachesolr_search /? Filters = tid: 13

Y cree un alias de URL para search/apachesolr_search /? Filters = tid: 13 like products/tv.html

Encontrado a través de: http://drupal.org/node/783836#comment-4136475

4
realityloop

No es trivial cambiar la ruta de búsqueda si solo está utilizando el módulo de búsqueda apachesolr. Como depende del módulo de búsqueda central, la ruta está casi codificada. Depende de la búsqueda/{module} /% menu_tail. Si observa search_view () , la devolución de llamada para el módulo de búsqueda, encontrará que llama search_get_keys () , que espera que las claves de búsqueda estén en un determinado parte del camino. El módulo de búsqueda apachesolr también usa esta función para obtener claves, por lo que implementar un simple hook_menu_alter () no funcionará por sí solo.

Como se menciona en otra respuesta aquí, si puede ejecutar Views 3.x, entonces su mejor opción es usar módulo de vistas apachesolr . Con este módulo, puede definir fácilmente cualquier número de rutas personalizadas para los resultados de búsqueda.

Si no puede ejecutar 3.x, deberá usar una combinación de formulario alter (específicamente, search_form) y devoluciones de llamada de menú personalizadas para cambiar con éxito la ruta de búsqueda predeterminada.

4
jhedstrom

Puede usar vistas de solr para la búsqueda de su sitio.

  1. Crea una vista solr.
  2. Agregue una visualización de página con la ruta que desee
  3. Agregar texto de búsqueda como filtro.
  4. Forma expuesta en bloque
  5. Coloque el bloque donde desea que vaya su cuadro de búsqueda.
3
Jeremy French

Echa un vistazo a Agregar rutas de búsqueda personalizadas con hook_men por los chicos de Evolving Web. Habla sobre cómo escribieron un módulo personalizado para crear URL amigables para sus búsquedas de Solr. Probablemente necesite ajustarlo un poco, pero es un buen punto de partida.

2
Benedict Steele

O simplemente puede modificar un módulo contribuido que hace esto: Ruta personalizada de Apache Solr .

1
Ivan Alfaro

¿Qué hay de crear una nueva devolución de llamada de menú como la siguiente para hacer que apachesolr devuelva resultados en esa ruta?

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

Si solo quiere cambiar search/apachesolr_search/a otra cosa, por ejemplo 'inventario', puede intentar Redireccionamiento global módulo.

El truco consiste en crear 2 alias: uno para búsqueda/apachesolr_search/(para elementos facetados) y otro sin barra diagonal (para la página de búsqueda principal). La redirección global puede negarse a crear 2 alias para el mismo destino, pero puede insertarlo directamente en la base de datos.

0
gansbrest