私のシステムでは、データの挿入は常にlogstashを介してcsvファイルを介して行われます。マッピングを事前に定義することはありません。しかし、文字列を入力するときは常にanalyzed
として扱われ、その結果、hello I am Sinha
のようなエントリはhello
、I
、am
、Sinha
に分割されます。とにかくElasticsearchのデフォルト/動的マッピングを変更して、インデックスに関係なく、タイプに関係なくすべての文字列をnot analyzed
と見なすことができますか?または、.conf
ファイルに設定する方法はありますか? conf
ファイルが次のようになっているとします
input {
file {
path => "/home/sagnik/work/logstash-1.4.2/bin/promosms_dec15.csv"
type => "promosms_dec15"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
csv {
columns => ["Comm_Plan","Queue_Booking","Order_Reference","Multi_Ordertype"]
separator => ","
}
Ruby {
code => "event['Generation_Date'] = Date.parse(event['Generation_Date']);"
}
}
output {
elasticsearch {
action => "index"
Host => "localhost"
index => "promosms-%{+dd.MM.YYYY}"
workers => 1
}
}
すべての文字列をnot analyzed
にしたいのですが、それがElasticSearchに挿入される将来のすべてのデータのデフォルト設定であってもかまいません
フィールドの.raw
バージョンを照会できます。これは Logstash 1.3.1 で追加されました:
提供するlogstashインデックステンプレートは、インデックスを作成するすべてのフィールドに「.raw」フィールドを追加します。これらの「.raw」フィールドはlogstashによって「not_analyzed」として設定されるため、分析やトークン化は行われません。元の値がそのまま使用されます。
したがって、フィールドの名前がfoo
の場合、foo.raw
を照会して、not_analyzed
(区切り文字で分割されていない)バージョンを返します。
テンプレートを作成するだけです。走る
curl -XPUT localhost:9200/_template/template_1 -d '{
"template": "*",
"settings": {
"index.refresh_interval": "5s"
},
"mappings": {
"_default_": {
"_all": {
"enabled": true
},
"dynamic_templates": [
{
"string_fields": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"index": "not_analyzed",
"omit_norms": true,
"type": "string"
}
}
}
],
"properties": {
"@version": {
"type": "string",
"index": "not_analyzed"
},
"geoip": {
"type": "object",
"dynamic": true,
"path": "full",
"properties": {
"location": {
"type": "geo_point"
}
}
}
}
}
}
}'
Logstashディストリビューションからlib/logstash/outputs/elasticsearch/elasticsearch-template.jsonのコピーを作成します(/opt/logstash/lib/logstash/outputs/elasticsearch/elasticsearch-template.jsonとしてインストールされている場合があります)。
"dynamic_templates" : [ {
"string_fields" : {
"match" : "*",
"match_mapping_type" : "string",
"mapping" : {
"type" : "string", "index" : "analyzed", "omit_norms" : true,
"fields" : {
"raw" : {"type": "string", "index" : "not_analyzed", "ignore_above" : 256}
}
}
}
} ],
と
"dynamic_templates" : [ {
"string_fields" : {
"match" : "*",
"match_mapping_type" : "string",
"mapping" : {
"type" : "string", "index" : "not_analyzed", "omit_norms" : true
}
}
} ],
変更したファイルにプラグインを出力するためのtemplate
をポイントします。
output {
elasticsearch {
...
template => "/path/to/my-elasticsearch-template.json"
}
}
特定のフィールドについては、このデフォルトを引き続きオーバーライドできます。