Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module ›

Search API Solr

Eingetragen von geoport (101)
am 02.12.2014 - 15:08 Uhr in
  • Module
  • Drupal 7.x oder neuer

Hi Forum,
ich versuche gerade mich in das Search API Solr Modul einzuarbeiten, leider finde ich eine wichtige Stelle nicht, wo baut Drupal die Request-URL zusammen?
Hintergrund der Frage ist, wenn ich nach '*' suche bekomme ich keine Ergebnisse angezeigt, wenn ich aber http://localhost:8080/solr/collection1/select?q=*%3A*&wt=json&indent=true oder http://localhost:8080/solr/collection1/select?q=*&wt=json&indent=true bekomme ich alle meine Ergebnisse. Sollte es eine Stelle geben an der das Konfigurierbar ist, nur her damit, doch mehr interessiert mich der Code an dem die URL zusammengebaut wird (bzw. der Post) - auch um später eher was nachvollziehen zu können.
mfg
Tim

‹ [gelöst]Editor für (langer)Text-Feld - wie freischalten? Search API Solr ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo Tim, die SOLR Search

Eingetragen von Hyp1 (1461)
am 03.12.2014 - 10:57 Uhr

Hallo Tim,

die SOLR Search API indexiert nodes und Ihre Felder in den SOLR Index durch Cron läufe.
Es gibt In der SOLR Search API Einstellungen welche Felder wie indexiert werden sollen.
Wenn ein Benutzer eine Suche auslöst, läuft es umgekehrt.
Die Search API guckt welche nodes Felder gesucht werden und erstellt den Search String für den Index.
Die SOLR Search API weiss wie die nodes/felder im index heissen.
So heisst ggf: node 31 im index index_31 und node 31 body feld ist ggf im index ss_article_body

Der HttpRequest wird vom Browser ausgeführt, Du solltest den im Firebug sehen können.
Ich denke Du lernst mehr, wenn Du Dir das Schema des SOLR Indexes sowie die SOLR Query Syntax genauer ansiehst.
http://www.solrtutorial.com/solr-query-syntax.html
Wenn Du spezielle Suchen hast, mache erst die Suche von Hand.
Hast Du das gewünschte Ergebnis, kannst Du versuchen den Query durch Sucheinstellungen hin zu bekommen,
da Du ja weisst, wie dieser aussehen müsste.

Schönen Advent

Robert

https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi Robert, vielen Dank für

Eingetragen von geoport (101)
am 03.12.2014 - 11:33 Uhr

Hi Robert,
vielen Dank für den Link. Das Prinzip von Solr ist mir durchaus bewusst, ich kann ab und an jedoch noch nicht nachvollziehen, wie das Modul alles umsetzt. Fireburg und Crome sagen mir leider nicht, wie die URL heißt die abgesetzt wird, aber hier https://www.drupal.org/node/2240049 steht die Information die mir erstmal fehlte. Wenn ich nach Sternchen "*" suche, wird dieses leider zu einem "". Wenn ich jetzt das "" einfach durch sternchen * ersetzte erhalte ich auch den erwarteten Response.
mit bestem Gruß
Tim

www.geoportal.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo Tim,sorry ich habe Dir

Eingetragen von Hyp1 (1461)
am 03.12.2014 - 11:58 Uhr

Hallo Tim,

sorry ich habe Dir da etwas falsches gesagt.
Den Request zum Solr macht Drupal nicht der Browser,
daher kannst Ihn in Firebug gar nicht sehen.
Mit deinem obigen Link kannst Du dir den Request ausgeben lassen.
In dem Link den ich Dir gesendet habe schau mal bei Wildcard Matching.
Dort steht das SOLR * als ersten Charakter einer Suche nicht akzeptiert.

Zitat:

Note that Lucene doesn't support using a * symbol as the first character of a search.

LG

https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi Robert,ich glaube in

Eingetragen von geoport (101)
am 03.12.2014 - 15:59 Uhr

Hi Robert,
ich glaube in diesem Fall ist es ein Drupal-Problem, welches recht simnpel gelöst werden kann, ich brauche nur die Stelle an der das Sternchen feilter wird. In der Datei solr_connection.inc des search_api_solr Moduls wird in der Funktion public function search($query = NULL, array $params = array(), $method = 'GET') die URL zusammengebaut. Und wenn ich mit Sternchen suche (siehe unten), dann kommt diese bereits nicht als query an, alles andere wird sofert als query ausgegeben und auch in einen query-Parameter umgewandelt, nur eben bei einem * nicht. Wenn ich die URL hier manuell eingebe
z.B. http://127.0.0.1:8080/solr/collection1/select?fl=item_id%2Cscore&qf=tm_field_md_abstract%5E1.0&qf=tm_field_md_alternatetitle%5E1.0&qf=tm_field_md_cataloguuid%5E1.0&qf=tm_field_md_creationdate%5E1.0&qf=tm_field_md_geoid%5E1.0&qf=tm_field_md_keywords%5E1.0&qf=tm_field_md_language%5E1.0&qf=tm_field_md_provider%5E1.0&qf=tm_field_md_resolution%5E1.0&qf=tm_field_md_resstand%5E1.0&qf=tm_field_md_revision%5E1.0&qf=tm_field_md_time%5E1.0&qf=tm_field_md_uuid%5E1.0&qf=tm_title%5E1.0&fq=index_id%3A%22advmis%22&fq=hash%3A8fl2gm&start=0&rows=10&facet=true&facet.sort=count&facet.limit=10&facet.mincount=1&facet.missing=false&facet.field=ss_field_md_level&f.ss_field_md_level.facet.limit=50&wt=json&json.nl=map&q=*

Für mich bedeutet das erstmal, dass ich die Stelle finden muss wo dieses Query aus der URL(vermute ich) abgeleitet wird.

Dann funktioniert die Anforderung prima, sprich, wenn ich den Punkt finde an dem das Sternchen gefiltert wird, dann kann ich den Bug bereinigen, denn Lucene steckt zwar im Solr, aber Solr kann mit dem * sehr gut umgehen-kann über die normale Adminoberfläche von Solr auch sehr gut nachvollzogen werden.
mfg
Tim

public function search($query = NULL, array $params = array(), $method = 'GET') {
    // Always use JSON. See
    // http://code.google.com/p/solr-php-client/issues/detail?id=6#c1 for
    // reasoning.
    $params['wt'] = 'json';
    // Additional default params.
    $params += array(
      'json.nl' => self::NAMED_LIST_FORMAT,
    );
    dpm('Real Query: ');
    dpm($query);  //Außer Sternchen kommt hier eigentlich alles an
    dpm($params);
    if (isset($query)) {
      $params['q'] = $query;
    }

    // Carry out some performance improvements when no search keys are given.
    if (!isset($params['q']) || !strlen($params['q'])) {
      // Without search keys, the qf parameter is useless. We also remove empty
      // search keys here. (With our normal service class, empty keys won't be
      // set, but another module using this connection class might do that.)
      unset($params['q'], $params['qf']);

      // If we have filters set (which will nearly always be the case, since we
      // have to filter by index), move them to the q.alt parameter where
      // possible.
      if (!empty($params['fq'])) {
        $qalt = array();
        foreach ($params['fq'] as $i => $fq) {
          // Tagged filters cannot be moved to q.alt.
          if ($fq[0] !== '{') {
            $qalt[] = "($fq)";
            unset($params['fq'][$i]);
          }
        }
        if ($qalt) {
          $params['q.alt'] = implode(' ', $qalt);
        }
        if (empty($params['fq'])) {
          unset($params['fq']);
        }
      }
     
    }

    // Build the HTTP query string. We have our own method for that since PHP's
    // built-in http_build_query() doesn't give us the format Solr wants.
    dpm('Parameter: ');
    dpm($params);
   
    $queryString = $this->httpBuildQuery($params);
    dpm('Querystring: ');
    dpm($queryString);
    if ($method == 'GET' || $method == 'AUTO') {
      $searchUrl = $this->constructUrl(self::SEARCH_SERVLET, array(), $queryString);
      if ($method == 'GET' || strlen($searchUrl) <= variable_get('search_api_solr_http_get_max_length', 4000)) {
        return $this->sendRawGet($searchUrl);
      }
    }

    // Method is POST, or AUTO with a long query
    $searchUrl = $this->constructUrl(self::SEARCH_SERVLET);
    $options['data'] = $queryString;
    $options['headers']['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
    return $this->sendRawPost($searchUrl, $options);
  }

www.geoportal.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo nochmal,also ich halte

Eingetragen von Hyp1 (1461)
am 03.12.2014 - 18:44 Uhr

Hallo nochmal,

also ich halte es für keine gute Idee ein Contrib Modul selbst zu patchen.
Die Änderungen werden bei einem Update des Moduls überschreiben.

Liefert Dir der query manuell Ergebnisse oder nicht (das konnte ich aus Deinem vorigen Post nicht herauslesen)?

Zitat:

http://127.0.0.1:8080/solr/collection1/select?fl=item_id%2Cscore&qf=tm_field_md_abstract%5E1.0&qf=tm_field_md_alternatetitle%5E1.0&qf=tm_field_md_cataloguuid%5E1.0&qf=tm_field_md_creationdate%5E1.0&qf=tm_field_md_geoid%5E1.0&qf=tm_field_md_keywords%5E1.0&qf=tm_field_md_language%5E1.0&qf=tm_field_md_provider%5E1.0&qf=tm_field_md_resolution%5E1.0&qf=tm_field_md_resstand%5E1.0&qf=tm_field_md_revision%5E1.0&qf=tm_field_md_time%5E1.0&qf=tm_field_md_uuid%5E1.0&qf=tm_title%5E1.0&fq=index_id%3A%22advmis%22&fq=hash%3A8fl2gm&start=0&rows=10&facet=true&facet.sort=count&facet.limit=10&facet.mincount=1&facet.missing=false&facet.field=ss_field_md_level&f.ss_field_md_level.facet.limit=50&wt=json&json.nl=map&q=*

Leider weiss ich nicht welche SOLR Version Du benutzt aber mir scheint der q Parameter falsch
Ich kannte den Parameter Doppelpunkt mit q=*:*
Ausserdem musst Du aufpassen wenn du q und fq mischt, denn q bekommt nur was der fq durchlässt.
http://stackoverflow.com/questions/24319955/in-apache-solr-is-it-possibl...

LG

Robert

PS:
Wie der Wildcard und q genutzt werden kann in der SOLR Konfiguration eingestellt werden.

https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi Robert,ich weiß leider

Eingetragen von geoport (101)
am 04.12.2014 - 10:22 Uhr

Hi Robert,

ich weiß leider das es keine gute Idee ist, ein Modul so zu patchen, ich denke ich mache das erstmal auch nur bis ich das Modul gänzlich verstanden habe. Der Request

Zitat:

http://127.0.0.1:8080/solr/collection1/select?fl=item_id%2Cscore&qf=tm_field_md_abstract%5E1.0&qf=tm_field_md_alternatetitle%5E1.0&qf=tm_field_md_cataloguuid%5E1.0&qf=tm_field_md_creationdate%5E1.0&qf=tm_field_md_geoid%5E1.0&qf=tm_field_md_keywords%5E1.0&qf=tm_field_md_language%5E1.0&qf=tm_field_md_provider%5E1.0&qf=tm_field_md_resolution%5E1.0&qf=tm_field_md_resstand%5E1.0&qf=tm_field_md_revision%5E1.0&qf=tm_field_md_time%5E1.0&qf=tm_field_md_uuid%5E1.0&qf=tm_title%5E1.0&fq=index_id%3A%22advmis%22&fq=hash%3A8fl2gm&start=0&rows=10&facet=true&facet.sort=count&facet.limit=10&facet.mincount=1&facet.missing=false&facet.field=ss_field_md_level&f.ss_field_md_level.facet.limit=50&wt=json&json.nl=map&q=*

liefert exakt die Ergebnisse die ich haben möchte. Nur ein Sternchen kommt eben erst gar nicht bei der URL an. Ich hatte bis dato gedacht, dass das Modul dieses * rausfiltert. Ich schau mir den FQ einmal an.
mfg
Tim

Ich benutze übrigens 4.6.1, wobei meines Erachtens seit der Version 4 q=* immer funktioniert hat, um alle Datensätze zu bekommen. Wenn ich in Drupal mit *:* suche, wird der Query leider auch nicht ausgeführt, weil an Solr q=: geschickt wird.

www.geoportal.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo nochmal, es ist schon

Eingetragen von Hyp1 (1461)
am 04.12.2014 - 10:36 Uhr

Hallo nochmal,

es ist schon eine Weile her als ich zuletzt einen SOLR verwendet habe.
Also wenn der Query die richtigen Ergebnisse liefert ist er wohl definitiv richtig.
Anstatt das Modul umzuschreiben, würde ich eher den q parameter
vom SOLR anhängen lassen.
Du kannst in den SOLR Einstellungen des RequestHandlers (heute SearchHandler) QueryParameter hinzu fügen.
http://wiki.apache.org/solr/SearchHandler
Das sollte für Dich besser Funktionieren.

LG

Robert

https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi Robert, damit werde ich es

Eingetragen von geoport (101)
am 04.12.2014 - 11:02 Uhr

Hi Robert, damit werde ich es vermutlich machen müssen, da hast du vollkommen recht, hätte ich auch dran denken können. Nichts deso trotz werde ich nicht drum herumkommen mir das Modul genauer anzusehen. Und da ist eben erstmal das Ziel zu schauen an welcher Stelle der Search API der Query gefiltert wird. Ich werde mich wohl auch in die Entwicklerliste mit eintragen lassen und da mitwirken, da ich eh nicht um das Solr-Modul herumkomme.
mit freundlichem Gruß
Tim

www.geoportal.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Meldung zu Token im Statusbericht
  • Modulupdate per Webinterace scheitert an authorize.php und access denied für Admin-User
  • Fehlermeldung: Deprecated function
  • Warning: call_user_func() expects parameter 1 to be a valid callback, class 'Drupal\node\Entity\Node' does not have a method 'ge
  • Versenden von Anfragen per Webform
  • Goodbye Online Drupal Meetup Germany - Hello Drupal DACH Online Meetup!
  • Übersetzte Felder bei Inhaltstyp automatisch übernehmen
  • Content Ex-/Import
  • RESTful Path request will nicht
  • Wer ist online Block
  • Doppelte Anzeige von Node im View
  • URL-Alias von bestehendem Link wird gelöscht und auf -0 gesetzt 404 Fehler entsteht
Weiter

Neue Kommentare

  • Self-referencing
    vor 5 Stunden 56 Minuten
  • settings.php
    vor 6 Stunden 32 Minuten
  • Kulturmensch schrieb Prima
    vor 7 Stunden 29 Minuten
  • Metatag
    vor 7 Stunden 39 Minuten
  • Links
    vor 6 Stunden 58 Minuten
  • Wenn Du nach der
    vor 8 Stunden 43 Minuten
  • Gut zu wissen. Demnächst
    vor 1 Tag 1 Stunde
  • Token Fehler behoben
    vor 1 Tag 1 Stunde
  • Du hast völlig recht, da habe
    vor 1 Tag 6 Stunden
  • Link 404
    vor 1 Tag 10 Stunden

Statistik

Beiträge im Forum: 245974
Registrierte User: 18827

Neue User:

  • finnster
  • Damian1802
  • MrWebMV

» Alle User anzeigen

User nach Punkten sortiert:
wla9010
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3916
ronald3829
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 7 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association