2016-07-20 8 views
1

ich dies auf einem lokalen 1.7.5 Elasticsearch Installation bin versuchtElasticsearch Schindel Token Filter funktioniert nicht

http://localhost:9200/_analyze?filter=shingle&tokenizer=keyword&text=alkis stack 

Ich sehe das

{ 
    "tokens":[ 
     { 
     "token":"alkis stack", 
     "start_offset":0, 
     "end_offset":11, 
     "type":"word", 
     "position":1 
     } 
    ] 
} 

Und ich erwartete etwas wie dieses

zu sehen
{ 
    "tokens":[ 
     { 
     "token":"alkis stack", 
     "start_offset":0, 
     "end_offset":11, 
     "type":"word", 
     "position":1 
     }, 
     { 
     "token":"stack alkis", 
     "start_offset":0, 
     "end_offset":11, 
     "type":"word", 
     "position":1 
     } 
    ] 
} 

Fehle ich etwas?

aktualisiert

{ 
    "number_of_shards": 2, 
    "number_of_replicas": 0, 
    "analysis": { 
    "char_filter": { 
     "map_special_chars": { 
     "type": "mapping", 
     "mappings": [ 
      "- => \\u0020", 
      ". => \\u0020", 
      "? => \\u0020", 
      ", => \\u0020", 
      "` => \\u0020", 
      "' => \\u0020", 
      "\" => \\u0020" 
     ] 
     } 
    }, 
    "filter": { 
     "permutate_fullname": { 
     "type": "shingle", 
     "max_shingle_size": 4, 
     "min_shingle_size": 2, 
     "output_unigrams": true, 
     "token_separator": " ", 
     "filler_token": "_" 
     } 
    }, 
    "analyzer": { 
     "fullname_analyzer_search": { 
     "char_filter": [ 
      "map_special_chars" 
     ], 
     "filter": [ 
      "asciifolding", 
      "lowercase", 
      "trim" 
     ], 
     "type": "custom", 
     "tokenizer": "keyword" 
     }, 
     "fullname_analyzer_index": { 
     "char_filter": [ 
      "map_special_chars" 
     ], 
     "filter": [ 
      "asciifolding", 
      "lowercase", 
      "trim", 
      "permutate_fullname" 
     ], 
     "type": "custom", 
     "tokenizer": "keyword" 
     } 
    } 
    } 
} 

Und ich versuche, wie dieser

http://localhost:9200/INDEX_NAME/_analyze?analyzer=fullname_analyzer_index&text=alkis stack 
+0

Nein, es funktioniert wie erwartet. Und mit 'keyword' werden die beiden Begriffe btw nicht geteilt. Was willst du aber erreichen? –

+0

Ich postete den gesamten Analysator. Ich möchte ein Feld (Fullname) normalisieren und Permutationen machen, um am Ende eine unscharfe Suche zu machen. Grundsätzlich möchte ich 'Andrei Stefan' nehmen und es normalisieren. Dann machen Sie Permutationen 'andrei stefan' und' stefan andrei'. – alkis

+0

Der Grund, warum ich Schlüsselwort anstelle von Standard oder Leerzeichen verwende, ist, weil ich den gesamten vollständigen Namen als ein Token behalten möchte. Aber wenn die Permutationen erstellt werden, muss ich Whitespace verwenden, was tatsächlich konfiguriert ist. – alkis

Antwort

1

Index Vornamen und Nachnamen in zwei getrennten Feldern in IHM zu testen, so wie man sich in dem hast DB. Der als Anfrage empfangene Text kann analysiert werden (match tut es zum Beispiel, query_string tut es). Und es gibt Möglichkeiten, beide Felder gleichzeitig mit allen Begriffen im Suchstring zu durchsuchen. Ich denke, Sie verkomplizieren den Anwendungsfall mit einzelnen Namen auf einmal und erstellen Namenspermutationen zur Indexierungszeit.