2016-03-29 10 views
1

Ich möchte Platzhalter verwenden, um E-Mails in Elasticsearch zu suchen.Warum Platzhalter '@ `in Elasticsearch nicht verwenden kann?

Zum Beispiel:

{ 
    "query": { 
     "wildcard": { 
    "email": "*yahoo*" 
    } 
    } 
} 

Ich kann alle yahoo E-Mails erhalten, enthält. Aber wenn ich so suche, kommt kein Dokument zurück.

{ 
    "query": { 
     "wildcard": { 
    "email": "*@yahoo*" 
    } 
    } 
} 

Ich verstehe nicht, warum so. Kann mir jemand helfen?

Vielen Dank im Voraus!

+0

sollte es nicht '. * @ Yahoo. *' Oder wenn Sie nur Zahlen und Alphabete wollen dann '\ w * @ yahoo \ w *' – rock321987

+0

@ rock321987 sorry, es funktioniert nicht. – pangpang

+0

Es sollte funktionieren..Kann etwas spezifisch für 'elastische Suche' sagen .. – rock321987

Antwort

3

Standard Analyzer ist der Schuldige in Ihrem Fall.

email Feld in Ihrem Index scheint analyzed Zeichenfolge zu sein. Wenn Sie es indexieren, wird es in somemail, yahoo.com aufgeteilt und diese beiden Tokens werden in reverse index gespeichert. Deshalb konnten Sie nicht mit @yahoo suchen. Sie können analyze API verwenden, um zu sehen, wie Ihr Begriff in Token umgewandelt wird.

curl -XGET "http://localhost:9200/_analyze?tokenizer=standard" -d "[email protected]" 

Sie folgende Ausgabe erhalten wird:

{"tokens":[{"token":"test","start_offset":0,"end_offset":4,"type":"<ALPHANUM>","position":0},{"token":"yahoo.com","start_offset":5,"end_offset":13,"type":"<ALPHANUM>","position":1}]} 

Sie können uax_url_email verwenden, wenn Sie mit @yahoo

Hoffnung gesucht werden soll, das hilft !!

+0

+1 Auch Platzhalter funktionieren für nicht analysierte Felder. Aus der Dokumentation: Stimmt mit Dokumenten überein, deren Felder einem Platzhalterausdruck entsprechen (nicht analysiert). – Rahul

+0

@rahulroc: Ja, du hast Recht – Richa

+0

@Richa Danke für deine Hilfe! – pangpang

Verwandte Themen