Für solr Profis
am 17.01.2016 - 20:49 Uhr in
Hallo,
ich bin momentan echt an verzweifeln seit nun c.a. 2 wochen sitze ich an diesen Problem. Nach mehreren Lösungsansätzen die auch teilweise auch funktioniert haben bin ich zu den Entschluss gekommen doch solr in verbindung mt der search api zu verwenden.
Problem Nr 1 ist die solr abfrage soll prüfen ob sich in index ein Polygon befindet welches den im query angegeben lat/lng punkt enthält und diese ausgeben. Hierzu habe ich diese nicht auf drupal spezialisierte tutorial gefunden: http://www.shi-gmbh.com/blog/2013/einfuehrung-in-die-geo-suche-mit-solr
Dort heist es man muss ein feldtypen in solr anlegen:
<fieldtype name="location_rpt"
class="solr.SpatialRecursivePrefixTreeFieldType"
spatialContextFactory="com.spatial4j.core.context.jts.JtsSpatialCon
textFactory" distErrPct="0.025" maxDistErr="0.000009"
units="degrees"/>
Und die Indexierung soll dann so aussehn:
<field name="geo">POLYGON((-10 30,-40 40,-10 -20,-10 30))</field>
Ich habe bereits ein geofeld->WTK Indexiert mittels string. Die in der index gespeicherte json zeile sieht in etwa so aus:
"ss_field_geo$geom":"POLYGON ((17.2265624921 50.9584267264, 18.9843749921 48.4583518861, 20.742187492 51.6180165517, 17.5781249921 50.5134265294, 17.2265624921 50.9584267264))",
Kann man jetzt einfach den Feldypen auf den solr server irgentwie anpassen das er das feld als geofeld akzeptiert? Falls ja in welcher Datei? Oder muss ich das irgenwie mittels Drupal modul schreiben? Oder beides? Sämtliche hilfe ist gern gesehn auch wenn ich hier völlig daneben liege.
Problem Nr 2 ist der index enthält noch 2 felder eimal den Usernamen und eine nr. Ich möchte erstmal den oben beschrieben filter ausführen das resultat sollte dann erstmal so aussehen:
username: hans
nr: 23
polygon: ein polygon welches in filter past
username: hans
nr: 44
polygon: ein polygon welches in filter past
username: peter
nr: 55
polygon: ein polygon welches in filter past
Nun möchte ich aber das nur ein Index pro Username ausgegeben wird und zwar der mit der niedrigsten nr.
Also so:
username: hans
nr: 23
polygon: ein polygon welches in filter past
username: peter
nr: 55
polygon: ein polygon welches in filter past
wie stell ich das an?
Ich bin mir bewusst das ich hier für solche fragen keine Komplettlösung erwarten kann für jegliche Hilfe bin ich aber dankbar Links die mir weiterhelfen ob nun in deutsch oder englisch werden auch gerne angenommen.
Lg Patrici
- Anmelden oder Registrieren um Kommentare zu schreiben
Das 2te Problem konnte ich
am 20.01.2016 - 11:28 Uhr
Das 2te Problem konnte ich nun provisorisch mittels des moduls VIEWS DISTINCT lösen. Ist leider keine optimale lösung da search api facet die gefilterten nodes trotzdem mit einbezieht in den Zusammenhang stellt das für mich allerdings kein großartiges Problem da. Anders sieht es beim ersten Problem da kann ich auf eine solr Lösung nicht verzichten.
Gibt es hier den keinen der schon etwas ähnliches gemacht hat und mir ein paar hinweise geben kann?