2016-10-20 1 views
4

Ich renne gerade in ein Problem immer und immer wieder. Ich verwende die Collective Solr 4.1.0 Suche auf unserem Plone 4.2.6 System. Derzeit, wenn Sie eine Suche auslassen, funktioniert es gut, solange kein Wildcard-Symbol im Suchfeld vorhanden ist. So zum Beispiel Prof Dr Mathew Rogers funktioniert gut und liefert gute Ergebnisse, wie eine Person 'Prof. Dr. Mathew Rogers '.Solr akzeptiert keine Abfragen mit einem Punkt

Wenn ich die Suche weglassen Prof. Dr. Mathew Rogers Solr wird keine Ergebnisse zurückgeben.

Ich überprüfte alle anderen Fragen auf dieser Plattform in Bezug auf diese oder nahe Probleme, aber keine wurde richtig beantwortet. Hat jemand von euch eine Idee, warum der Solr-Abfrageprozess bricht, wenn ich nach etwas suche, das zum Beispiel einen Punkt enthält? Hilfe würde sehr geschätzt werden!

Antwort

2

Es gibt eine großartige Funktion von collective.solr, die Sie Solr mit Lucene Query-Syntax von der Plone-Suche abfragen können.

Abfrage Parser Syntax: ->https://lucene.apache.org/core/2_9_4/queryparsersyntax.html

kollektive solr hat einen einfachen Test, ob es sollte Ihre Suchkriterien mangle die Einstellungen in collective.solr verwenden oder wenn es übergibt sie als einfache lucene Abfrage solr .

The test is really simple, but the mangle code is hart to understand (at least for me):

simpleTerm = compile(r'^[\w\d]+$', UNICODE) 

... 

simpleCharacters = compile(r'^[\w\d\?\*\s]+$', UNICODE) 

Wenn du ist Begriff nicht übereinstimmt, collective.solr geht davon aus Sie versuchen, eine Abfrage mit einfacher lucene Syntax zu tun, und deshalb wird es kein Ergebnis in Ihrem Fall zeigen.

I steht vor dem gleichen Problem vor ein paar Wochen und Sie haben folgende Möglichkeiten:

  1. einfach einen Punkt hinzuzufügen - so collective.solr erkennt Begriffe mit Punkten nicht als lucene Abfrage suchen.
  2. Bereiten Sie Ihren Suchbegriff vor dem Weiterleiten an collection.solr vor.

Erste Optionen sind nur ein Quick-Win, weil es jemand sein, der für einen Zeitraum mit einem Komma suchen, Semikolon, Zitaten usw.

ich persönlich die die Suchbegriff, bevor ich angepasst übergab es an die Suche.

Afaik der solr tokenizer entfernt auch mehrere nicht alphanumerische Zeichen

This SO answer explains how the default tokenizer works

Splits Worte an Interpunktionszeichen, das Entfernen Interpunktion. Ein Punkt, auf den kein Leerzeichen folgt, wird jedoch als Teil eines Tokens betrachtet. Teilt Wörter an Bindestrichen, sofern keine Zahl im Token vorhanden ist. In diesem Fall wird das gesamte Token als Produktnummer interpretiert und nicht geteilt. Erkennt E-Mail-Adressen und Internet-Hostnamen als ein Token.

So ist es an Ihnen, wie Sie nicht alphanumerische Begriffe :-)

Die beste Lösung zu handhaben möchten, wenn Sie nie lucene Abfragesyntax verwenden möchten, wäre die Bedingungen vorzubereiten ähnlich dem tokenizer.

+0

Vielen Dank für Ihre Antwort! Ich habe gerade festgestellt, dass ich für ein Feld den falschen 'field_type' hatte, der keinen Tokenizer hatte. Ich habe das behoben, noch Anfragen geben keine Antwort. Noch auf einem anderen Server, wo alle Felder in Token sind, funktioniert es. Liegt das daran, dass der indizierte Wert ebenfalls in Token umgewandelt werden muss? Ich habe meinen neuen Server noch nicht neuindex__. Aber ich dachte nur das Ändern der schema.xml würde funktionieren, da ich nur über die Abfrage besorgt bin. –

+0

Sie müssen die Abfrage, die devlvered ist, im Voraus vorbereiten, wie im 'SearchViewlet'. Da solr nicht explizit nach einem '' 'sucht, können Sie es vor der Abfrage von solr entfernen. Ein Regex oder einfaches Repllace würde die Arbeit in Ihrem Fall tun. – Mathias

Verwandte Themen