2016-07-13 10 views
0

Ich suche schon viel nach einer Antwort, aber nichts funktioniert, also ist das mein Problem, ich habe einen Index mit einem Feld "name" vom Typ string, mache ich einfach Volltextsuche mit match_phrase, aber dieses Feld ist manchmal eine Zeichenkombination aus wenigen Wörtern, getrennt durch Komma, Punkt, Schrägstrich oder Bindestrich, zum Beispiel "Ingenieur, Operator, Wartung". Ich muss diese Ergebnisse, zum Beispiel ausschließen, wenn ich die nächsten Namen haben:Ergebnisse ausschließen, die Sonderzeichen aus elasticsearch enthalten

  1. „Ingenieur, Bediener, Wartung“
  2. „Ingenieur“
  3. „Wirtschaftsingenieur

Wenn ich die Suche . „Ingenieur“, möchte ich die letzten beiden Ergebnisse erhalten und die erste exlude habe ich versucht, mit einem muss nicht-Klausel wie folgt aus:

"query": { 
    "bool": { 
    "must": { 
     "match_phrase": { 
     "name": "Vendedor" 
     } 
    }, 
    "must_not":{ 
     "match":{ 
     "name": "\." 
     } 
    } 
    } 
} 

Ich habe versucht, mit regulären Ausdrücken zu, aber es kommt mir immer die Ergebnisse mit den falschen Zeichen:

"must_not":{ 
     "regexp":{ 
     "name": ".*[\-\.\/\.].*" 
     } 
    } 

Was mache ich falsch oder was sollte die Art und Weise sein, um diese Aufgabe zu erledige?

Antwort

1

In Indexeinstellungen können Sie ein char-Filter und Muster wie das hinzufügen, aber dann müssen Sie neu indizieren, bitte, hier, um weitere Informationen https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-pattern-analyzer.html

   "char_filter": { 
        "pattern": { 
        "pattern": "\\W+", 
        "type": "pattern_replace", 
        "replacement": " " 
        }, 
        "html": { 
        "type": "html_strip" 
        } 
       } 
+0

Hallo, ich brauche nicht die falsche ersetzen Zeichen, was ich brauche, ist, die Ergebnisse auszuschließen, die diese Zeichen enthält. Ich bearbeite meine Antwort mit einem Beispiel – ingemi

+0

Hallo, String Felder werden standardmäßig in ElasticSearch analysiert. Hast du es versucht, indem du es im Mapping auf "not_analyzed" gesetzt hast? https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_exact_values.html#_term_filter_with_text – Luca

Verwandte Themen