2016-11-04 2 views
0

die Definition in der schema.xml abgelegt:solr Abfrage: mit der Wildcard Durchsuchungen Typ *

<field name="typeDesc" type="text_general" indexed="true" stored="true"/>

Der TYPEDESC speichern die Werte wie 公立, 公立, 三甲, 公立, 二甲

.

Die Frage ist, wenn ich typeDesc: * 三甲 * abfrage, gibt es nichts, aber wenn ich typeDesc: * 公立 * oder typeDesc: * 三 * oder typeDesc: * 甲 * oder typeDesc: 三甲 abfragen, könnten alle das Ergebnis wie finden Ich möchte den Grund wissen.

Antwort

0

Obwohl ich mit den Regeln für das Knacken von Kanji nicht vertraut bin, gehe ich davon aus, dass der Grund dafür ist, dass bei der Suche mit Platzhaltern keine Analyse für das Feld durchgeführt wird. Wenn 三 und 甲 in separate Token aufgeteilt sind, findet die Wildcard-Übereinstimmung kein Token, das Ihrer Suche entspricht.

Sie können dies überprüfen, indem Sie auf der Registerkarte "Analyse" der Verwaltungsseite nachsehen, in welche Token ein indizierter Begriff eingefügt wird.

Mögliche Lösungen wären, die Begriffe auch in einem einzelnen Stringfeld zu indizieren und Wildcard-Matches dagegen zu verwenden oder einen KeywordTokenizer für Ihr Textfeld zu verwenden, wenn Sie vor dem Speichern des Tokens weitere Verarbeitung benötigen Text als ein einzelnes Token). Sie könnten auch einen ngramfilter verwenden und die Platzhalter löschen.

+0

Wenn ich typeDesc abfragen: "三甲", gibt es das Ergebnis. Soweit ich weiß, ist das eine genaue Abfrage, also was ist der Unterschied bei der Abfrage typeDesc: * 三甲 *. – guiyu

+0

Wie ich in meinem Beitrag erwähnt habe, wenn Sie einen Platzhalter verwenden, wird keine Analyse durchgeführt. "Analyse" ist das, was mit einem Wert geschieht, bevor er gespeichert oder mit den gespeicherten Werten abgeglichen wird, beispielsweise in einzelne Wörter oder Sätze aufgeteilt. In diesem Fall bin ich der Ansicht, dass 三 und 甲 in separate Token aufgeteilt sind, was bedeutet, dass sie getrennt gespeichert werden. Wenn Sie die Platzhaltersuche verwenden, wird der Analyseschritt (der sie in separate Token aufteilt) übersprungen und Solr sucht nach einem gespeicherten Token von 三甲. Es gibt kein solches Token (da es beim Speichern geteilt wird), so dass Sie keinen Treffer erhalten. Verwenden Sie die Analyseseite zur Bestätigung – MatsLindh