Drupal 7 local apache solr: Geospatial zoekopdracht op radius

Posted by: 
Dominique De Cooman

In deze blog leggen we uit hoe je een geospatial search by radius kunt instellen met gebruik van de apache solr geospatial extension in drupal 7.

Je hebt de volgende modules nodig om de geospatial search by radius te kunnen uitvoeren:

location, search_api, search_api_solr, search_api_location, gmap, views
Desgewenst kun je tevens de facetapi gebruiken om facetten mogelijk te maken.

Nu moeten we een solr instance instellen. http://ygerasimov.com heeft reeds een versie van apachesolr samengesteld met de extensie er in. Hij heeft tevens de search_api_solr schema.xml en de solrconfig.xml erin gekopieerd. We kunnen het hier downloaden: http://ygerasimov.com/geo/sites/default/files/apachesolr.tar.gz

Je kunt het downloaden naar /etc/apachesolr.tar.gz en extraheren met

cd /etc
wget <a href="http://ygerasimov.com/geo/sites/default/files/apachesolr.tar.gz
tar">http://ygerasimov.com/geo/sites/default/files/apachesolr.tar.gz
tar</a> -xvf apachesolr.tar.gz 
rm apachesolr.tar.gz 
cd apachesolr

Je kunt het starten om te testen:

java -jar start.jar

Ga naar poort 8983 http://127.0.0.1:8983/solr/ en bekijk de interface.

Nu zou een start-up script fijn zijn, zodat je het gemakkelijk kunt starten en stoppen en het in de achtergrond kan draaien.
Maak ene file /etc/init.d/solr en plak dit erin

#!/bin/sh -e
# Starts, stops, and restarts solr
SOLR_DIR="/etc/apachesolr" 
JAVA_OPTIONS="-Xmx1024m -DSTOP.PORT=8079 -DSTOP.KEY=stopkey -jar start.jar" 
LOG_FILE="/var/log/solr.log" 
JAVA="/usr/bin/java" 
 
      case $1 in
          start)
              echo "Starting Solr" 
              cd $SOLR_DIR
              $JAVA $JAVA_OPTIONS 2> $LOG_FILE &
              ;;
          stop)
              echo "Stopping Solr" 
              cd $SOLR_DIR
              $JAVA $JAVA_OPTIONS --stop
              ;;
          restart)
              $0 stop
              sleep 1
              $0 start
              ;;
          *)
              echo "Usage: $0 {start|stop|restart}" >&2
              exit 1
              ;;
      esac

Het volgende wat je nodig hebt is een alias, zodat je de opdrachtregels van overal op de server kunt gebruiken.

nano .bashrc #It is normaly located in the user folder
#solr alias
alias solr="/etc/init.d/solr" 

Sluit en test met "solr start" of "solr stop" of "solr restart" (sluit en herstart je shell om het te laten werken)

Als je solr wilt laten starten wanneer de server boots, dan moet je dit toevoegen aan de boot sequence.

update-rc.d solr defaults  

Nu zijn we klaar op het server level. Laten we naar onze drupal instance gaan. Bekijk admin/config/search/search_api, je zult zien dat we een index en een server nodig hebben.
Allereerst maken we een server door onze solr te selecteren
/admin/config/search/search_api/add_server. Vul de locatie van onze solr in http://localhost:8983/solr. Stel gerust een authentication in maar dat wordt niet behandeld in deze post.
Creëer vervolgens een index door onze solr server die we gemaakt hebben te selecteren. Selecteer in de fields tab alle velden die je in de index wil hebben. Deze velden zullen gebruikt worden om de zoekopdracht in uit te voeren. Zorg ervoor dat je de lengtegraad en breedtegraad velden heb ingeschakeld (het wordt geleverd door de location module) omdat deze coordinaten gebruikt zullen worden om de radius zoekopdracht op uit te voeren.

Creëer een inhoudstype en schakel op de admin/structure/types/manage/[content-type]/edit pagina de locatie functie in. Gebruik dit niet samen met het locatie cck veld. Dat werkt niet.

Beheer de locatie instellingen hier:/admin/config/content/location. Schakel "Use a Google Map to set latitude and longitude " in. Stel een goolge map api key in om dit te laten werken (link is op de pagina).

Bheer de kaart instellingen hier:admin/config/services/gmap en hier admin/config/services/gmap_location. Je hebt een macro generator die uitgerust is met de gmap module. Dus schkel die module in om je eigen macro te genereren en te gebruiken voor je kaarten.

Creëer nu een aantal nodes. Stel de locatie niet te ver van elkaar in, zodat we gemakkelijk kunnen testen.

We zijn er bijna. Om een zoek pagina te maken hebben we views nodig. Dus maak een view met de zoekindex als basistabel. Voeg een filter toe genaamd "Search: Radius" en expose het. Vul de exposed instellingen in met de coördinaten van het middelpunt van de cirkel en standaard radius. Selecteer NIET gmap voor een view display, het moet HTML List zijn. Verander het type van de Exposed form style naar Seach API Location. Zie afbeelding:

In Search API location exposed form style opties stel de volgende string naar GMap macro: [gmap align=Center |zoom=9 |center=52.0904,5.1004 |width=600px |height=500px |control=Small |type=Map]

Nu moet je het volgende hebben:

Om het te zien werken op een live demo:

http://ygerasimov.com/geo/search_location

Veel dank aan http://ygerasimov.com voor het bijdragen van de module en het geprecompileerde pakket.

Reactie toevoegen