2016-09-22 3 views
0

Я использую logstash индексировать некоторые данные MySQL на elasticsearch:Как определить конкретные поля лексемизацию на Logstash

input { 
    jdbc { 
     // JDBC configurations 
    } 
} 
output { 
    elasticsearch { 
     index => "" 
     document_type => "" 
     document_id => "" 
     hosts => [ "" ] 
    } 
} 

При проверке результатов я обнаружил, что elasticsearch автоматически размечает текст, как это:

"Foo/Bar" -> "Foo", "Bar" 
"The thing" -> "The", "thing" 
"Fork, Knife" -> "Fork", "Knife" 

Ну, это нормально для большинства моих полей. Но есть одно конкретное поле, в котором я хотел бы иметь пользовательский токенизатор. Это поле, разделенное запятой (или разделенная запятая). Таким образом, это должно быть:

"Foo/Bar" -> "Foo/Bar" 
"The thing" -> "The thing" 
"Fork, Knife" -> "Fork", "Knife" 

Я блуждаю, если есть способ настроить это в моей конфигурации logstash.

UPDATE:

Это один пример индекса, который у меня есть. Конкретное поле kind:

{ 
    "index-name": { 
    "aliases": {}, 
    "mappings": { 
     "My-type": { 
     "properties": { 
      "@timestamp": { 
      "type": "date", 
      "format": "strict_date_optional_time||epoch_millis" 
      }, 
      "@version": { 
      "type": "string" 
      }, 
      "kind": { 
      "type": "string" 
      }, 
      "id": { 
      "type": "long" 
      }, 
      "text": { 
      "type": "string" 
      }, 
      "version": { 
      "type": "string" 
      } 
     } 
     } 
    }, 
    "settings": { 
     "index": { 
     "creation_date": "", 
     "number_of_shards": "", 
     "number_of_replicas": "", 
     "uuid": "", 
     "version": { 
      "created": "" 
     } 
     } 
    }, 
    "warmers": {} 
    } 
} 
+0

Да, это возможно. Можете ли вы поделиться своим текущим сопоставлением и именем поля, которое хотите по-разному обозначить? – Val

+0

Эй, @ Вал, я только что добавил к вопросу. Благодарю. – Montenegrodr

ответ

1

Это можно сделать с помощью index template.

Сначала удалите текущий индекс:

DELETE index_name 

Затем создать шаблон для индекса с соответствующим отображением для kind поля, как это:

PUT _template/index_name 
{ 
    "template": "index-name", 
    "mappings": { 
    "My-type": { 
     "properties": { 
     "@timestamp": { 
      "type": "date", 
      "format": "strict_date_optional_time||epoch_millis" 
     }, 
     "@version": { 
      "type": "string" 
     }, 
     "kind": { 
      "type": "string", 
      "index": "not_analyzed" 
     }, 
     "id": { 
      "type": "long" 
     }, 
     "text": { 
      "type": "string" 
     }, 
     "version": { 
      "type": "string" 
     } 
     } 
    } 
    } 
} 

Затем вы можете запустить Logstash снова и индекс будет воссоздан с соответствующим отображением.

+0

Спасибо. Итак, мне нужно добавить этот дополнительный шаг «создать индекс» в мой рабочий процесс. Я блуждаю, если создаю индекс только с свойством 'kind', он все равно будет работать. Хорошо, я должен проверить это. Спасибо, это было очень полезно. – Montenegrodr

+0

Создание этого шаблона должно выполняться ** только один раз **. Как только он там, вам не нужно делать это каждый раз. – Val

0

Ну, правильный ответ на этот вопрос: вы не можете сделать это с помощью logstash. Поэтому мне пришлось добавить дополнительный шаг, как следует.

Я, наконец, получил это, выполнив путь, показанный @Val. Спасибо, приятель. Итак, что я должен был сделать, чтобы создать индекс перед logstash ETL с конкретным Tokenizer:

{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "simple_analyzer": { 
      "tokenizer": "simple_tokenizer" 
     } 
     }, 
     "tokenizer": { 
     "simple_tokenizer": { 
      "type": "pattern", 
      "pattern": "," 
     } 
     } 
    } 
    }, 
    "template": "my-index", 
    "mappings": { 
    "my-type": { 
     "properties": { 
     "kind": { 
      "type": "string", 
      "analyzer": "simple_analyzer" 
     } 
     } 
    } 
    } 
} 

Это создаст Tokenizer запятой в kind поле. После этого я могу выполнить logstash etl и не перезаписать свойства kind.

+0

Конечно, вы можете сделать это через Logstash, так как вы можете переопределить шаблон logstash своим. – Val

+0

Ну, так что даже это не идеальный ответ. – Montenegrodr

+0

удалил зеленую метку. – Montenegrodr

Смежные вопросы