Wie mache ich eine partial match in Elasticsearch?
Habe ich einen link, wie http://drive.google.com und ich will match "google" aus dem link.
Habe ich:
query: {
bool : {
must: {
match: { text: 'google'}
}
}
}
Aber nur passt, wenn der ganze text ist 'google' (groß-und Kleinschreibung, so ist es auch mit Google oder GooGlE etc.). Wie kann ich match für die 'google' innerhalb eines anderen Strings?
- Vielleicht
match: { text: '.*google.*'}
helfen können. - Genial, das funktioniert! Kannst du deine Antwort als "Antwort" also ich kann abholen es, der beste zu sein?
- Ich habe die Antwort und lieferte einige relevante Referenz.
- Sie müssen die Versionsnummern hier so die richtige Lösung gepostet wird für Ihre version.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Punkt ist, dass die ElasticSearch regex, die Sie verwenden erfordert ein full-string-match:
So, um die Entsprechung ein beliebiges Zeichen (aber ein Zeilenumbruch), die Sie verwenden können
.*
Muster:Eine weitere Variante ist für die Fälle, wenn Sie Ihre Zeichenkette kann newlines:
match: { text: '(.|\n)*google(.|\n)*'}
. Diese schreckliche(.|\n)*
ist ein muss in ElasticSearch, da diese regex Geschmack lässt keine[\s\S]
workarounds, noch DOTALL/"Singleline" - flags. die "Der Lucene-engine für reguläre Ausdrücke ist nicht Perl-kompatibel, sondern unterstützt eine kleinere Auswahl von Operatoren."[0-9]+ gr[ea]y hats?
statt.verwenden Sie wildcard-Abfrage:
Ich nicht finden können, ein brechen ändern deaktivieren reguläre Ausdrücke in
match
, abermatch: { text: '.*google.*'}
funktioniert nicht auf meinem Elasticsearch 6.2 Cluster. Vielleicht ist es konfigurierbar?Regexp funktioniert:
Sowohl für Teil-und full-text-matching im folgenden arbeitete
Für eine generische Lösung, die Sie schauen können in einem anderen analyzer oder definieren Sie Ihre eigenen. Ich gehe davon aus, dass Sie mit dem standard-Analysator, der teilen würde http://drive.google.com in die Token "http" und "drive.google.com". Dies ist der Grund, warum die Suche bei google einfach nicht funktioniert, weil es versucht, zu vergleichen, um die volle "drive.google.com".
Wenn Sie stattdessen indiziert Ihre Dokumente mit einfachen Analysator würde es aufteilen in "http", "drive", "google", und "com". Dies ermöglicht das anpassen von jeder der diese Begriffe auf Ihre eigenen.
For partial matching können Sie entweder Präfix oder match_phrase_prefix.