2016-08-12 5 views
0

Mein Anwendungsfall: Ich habe ein einwertigen Feld namens Cqpath. Dies ist ein Textfeld und hat eine Werte, die in etwa wie folgt aussehen:Wie Abfrage solr Feld für eine Teilzeichenfolge

  1. "/ content/Domain/en/path/to/some/Seite"
  2. „/ content/Domain/en/path/zu/andere/Seite“
  3. "/ content/Domain/en-us/path/to/some/Seite"
  4. "/ content/Domain/en-us/path/to/andere/Seite"

Ich wollte eine Abfrage bilden, die mir 1. und 2. zurückgeben würde. Ich hatte versucht, die Zeilen des Schreibens:

cqpath: "/ content/Domain/en"

, die fehlerhaft sein entdeckt wurde, da es Artikel 3. und 4. sowie abruft. Kann jemand von Ihnen eine Möglichkeit finden, eine Abfrage zu schreiben, die nur 1. und 2. und nicht 3. und 4. zurückgibt?

Dies ist ein normaler Textfeldfeldtyp. Wirklich schätze deine Hilfe.

+0

Verwenden Sie [StandardTokenizer] (https://cwiki.apache.org/confluence/display/solr/Tokenizers#Tokenizers-StandardTokenizer)? Kannst du deine "schema.xml" irgendwo posten? – rivu

+0

Können Sie es in ein reguläres StrField kopieren und mit 'field:/content/domain/en/*' abfragen? – MatsLindh

Antwort

0

Ab Solr 4.0 können Sie eine Regex-Abfrage verwenden. Sie können einige nützliche Beispiele finden here. In Ihrem Fall können Sie die Ergebnisse, die Sie suchen mit so etwas wie:

cqpath:/.*content/domain/en.*/ 
+0

habe ich gerade versucht, und es scheint nicht zu funktionieren. Aus irgendeinem Grund scheint der Standard-Tokenizer den Bindestrich (-) und die Schrägstriche (/), die die Wurzel des Problems sind, wegzuwerfen. Danke, dass Sie sich die Zeit genommen haben, trotzdem zu antworten ... Mein Ziel hier ist es, mit Tokenizer herumzualbern. –

0

Es sieht aus wie Sie Teilstrecken versuchen, mit Grenzen, die auf Pfadelemente (Schrägstriche) hier passen. Die übliche generische Lösung besteht darin, während des Indexes zu tokenisieren, um alle alternativen Vervollständigungen zu erzeugen, und nicht Tokenize während der Abfrage. Daher ist die Feldtypdeklaration nicht symmetrisch. Es gibt Beispiele dafür in der Solr-Distribution. Und Sie würden mit etwas wie (Index-Zeit nur) EdgeNGramFilterFactory statt viel teurer Regex Matching aussehen.

Für Ihren speziellen Fall möchten Sie vielleicht Test PathHierarchyTokenizer betrachten, der das automatisch für Sie erledigt.

Und wenn Ihr Inhalt mehr wie vollständige URLs als nur Pfad wäre, könnte Sie auch eine benutzerdefinierte Update-Anfrage-Prozessor-Kette interessiert sein, die URLClassify URP enthält. Es ist nicht sehr dokumentiert, erwähnt aber generating url parts, was ich denke, dass Sie wollen.

+0

PathHierarchyTokenizer ist die Antwort ... Danke Fremder (reddit gold) :) –

Verwandte Themen