0

Ich habe diesen Index mit pipe als benutzerdefinierten Analysator. Wenn ich versuche, es zu testen, gibt es jedes Zeichen zurück, und keine durch Pipe abgegrenzten Wörter.Testen eines Elasticsearch benutzerdefinierten Analysator - Rohr-getrennte Schlüsselwörter

Ich versuche, für einen Anwendungsfall zu konstruieren, wo meine Eingabezeile keywords aussieht:und EL wird Übereinstimmungen zurückgeben, nachdem es explodiert wurde.

{ 
    "keywords": { 
    "aliases": { 

    }, 
    "mappings": { 
     "cloud": { 
     "properties": { 
      "keywords": { 
      "type": "text", 
      "analyzer": "pipe" 
      } 
     } 
     } 
    }, 
    "settings": { 
     "index": { 
     "number_of_shards": "5", 
     "provided_name": "keywords", 
     "creation_date": "1513890909384", 
     "analysis": { 
      "analyzer": { 
      "pipe": { 
       "type": "custom", 
       "tokenizer": "pipe" 
      } 
      }, 
      "tokenizer": { 
      "pipe": { 
       "pattern": "|", 
       "type": "pattern" 
      } 
      } 
     }, 
     "number_of_replicas": "1", 
     "uuid": "DOLV_FBbSC2CBU4p7oT3yw", 
     "version": { 
      "created": "6000099" 
     } 
     } 
    } 
    } 
} 

Wenn ich versuche es diese guide folgenden zu testen.

curl -XPOST 'http://localhost:9200/keywords/_analyze' -d '{ 
"analyzer": "pipe", 
"text": "pipe|pipe2" 
}' 

Ich bekomme Char-by-Char Ergebnisse zurück.

{ 
    "tokens": [ 
    { 
     "token": "p", 
     "start_offset": 0, 
     "end_offset": 1, 
     "type": "word", 
     "position": 0 
    }, 
    { 
     "token": "i", 
     "start_offset": 1, 
     "end_offset": 2, 
     "type": "word", 
     "position": 1 
    }, 
    { 
     "token": "p", 
     "start_offset": 2, 
     "end_offset": 3, 
     "type": "word", 
     "position": 2 
    }, 
    { 
     "token": "e", 
     "start_offset": 3, 
     "end_offset": 4, 
     "type": "word", 
     "position": 3 
    }, 

Antwort

1

Gute Arbeit, du bist fast da. Da das Rohr | Charakter ein reserviertes Zeichen in regulären Ausdrücken ist, müssen Sie es so entkommen:

 "tokenizer": { 
     "pipe": { 
      "pattern": "\\|", <--- change this 
      "type": "pattern" 
     } 
     } 

Und dann Analysator und produzieren funktioniert dies:

{ 
    "tokens": [ 
    { 
     "token": "pipe", 
     "start_offset": 0, 
     "end_offset": 4, 
     "type": "word", 
     "position": 0 
    }, 
    { 
     "token": "pipe2", 
     "start_offset": 5, 
     "end_offset": 10, 
     "type": "word", 
     "position": 1 
    } 
    ] 
} 
+0

passieren Sie wissen, wie den Tokenizer neu schreiben, ohne den Index neu zu erstellen? – Pentium10

+0

Sie können den Analysator in den Indexeinstellungen aktualisieren und dann update_by_query auf Ihrem Index aufrufen, und er aktualisiert die Daten – Val

+0

, um zu aktualisieren, musste ich den Index schließen und die put auf/_settings anwenden, dann den Index erneut öffnen, warten für Shards zur Initialisierung – Pentium10

Verwandte Themen