2012-04-02 9 views
2

Ich versuche, Dokumente zu finden, die Sterne/Fragezeichen in Solr-Textfeld mit Edismax Parser zu finden. Alles funktioniert einwandfrei, wenn ich nach üblichem Text suche (fq={!edismax}textfield:*sometext*) oder auch für irgendeinen anderen special Lucene character mit escaping (fq={!edismax}textfield:*\~*).Escaped asterisk/query mark nicht entkommen mit führenden Platzhalter in Edismax

jedoch bei der Suche nach * (fq={!edismax}textfield:*\**) oder ? (fq={!edismax}textfield:*\?*) diese Zeichen scheinen nicht entgangen zu sein, da alle Dokumente zurückgegeben werden. Ich versuche auch URL encoding für maskierte Zeichen (wie \%2A statt \*), aber das Ergebnis ist das gleiche.

Das Problem scheint zu Besorgnis führenden Platzhalter nur, da fq={!edismax}textfield:\** und fq={!edismax}textfield:\?* korrekte Ergebnisse Rückkehr, aber fq={!edismax}textfield:*\* und fq={!edismax}textfield:*\? nicht (wie auch fq={!edismax}textfield:*sometext\* etc.). Wie ist es möglich, nach */? mit Edismax mit führenden Stern Platzhalter zu suchen?

Antwort

0

Das Anführen des Sternchens funktioniert für mich. Diese Abfrage findet zwei Bücher in meinem Index mit einem eigenständigen Sternchen im Titel:

title:"*" 

Hier ist der Titel einer von ihnen: „Be * Wissen * Do, Angepasst vom offiziellen Armeeführung Manual“.

Ich benutze ein Edismax mit Solr 3.3.

+0

Ich würde für mich arbeiten, wenn ich Tokenizer wie WhitespaceTokenizerFactory verwendet. Jedoch muss ich nach strikter Übereinstimmung von Phrasen suchen und KeywordTokenizerFactory verwenden. Um einen Teil des Feldtextes zu finden, muss ich Platzhalter verwenden. – dev4

+0

Sie sollten in der Lage sein, strikte Übereinstimmung von Phrasen zu erhalten, ohne jeden Feldwert als einen einzelnen Token zu behandeln. Regexes gegen Token zu tun ist im Wesentlichen eine vollständige Tabelle Scan. Dies ist garantiert nicht skalierbar. Ich empfehle einen anderen Ansatz. –