Подтвердить что ты не робот

Изменение отображения по умолчанию для строки "не анализировано" в Elasticsearch

В моей системе вставка данных всегда выполняется через файлы csv через logstash. Я никогда не предопределял отображение. Но всякий раз, когда я ввожу строку, всегда считается 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 либо

4b9b3361

Ответ 1

Вы можете запросить версию .raw вашего поля. Это было добавлено в Logstash 1.3.1:

Созданный нами индексный шаблон стартаста добавляет поле ".raw" для каждого поля, которое вы индексируете. Эти поля ".raw" устанавливаются с помощью logstash как "not_analyzed", так что анализ или токенизация не происходит - наше исходное значение используется как-есть!

Итак, если ваше поле называется foo, вы должны запросить foo.raw, чтобы вернуть версию not_analyzed (не разделить на разделители).

Ответ 2

Просто создайте шаблон. пробег

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"
                        }
                    }
                }
            }
        }
    }
}'

Ответ 3

Сделайте копию файла lib/logstash/output/elasticsearch/elasticsearch-template.json из вашего дистрибутива Logstash (возможно, установленного как /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
    }
  }
} ],

и point template для вывода плагина в измененный файл:

output {
  elasticsearch {
    ...
    template => "/path/to/my-elasticsearch-template.json"
  }
}

Вы по-прежнему можете переопределить это значение по умолчанию для определенных полей.

Ответ 4

Я думаю, что обновление сопоставления является неправильным подходом только для обработки поля для целей отчетности. Рано или поздно вы можете захотеть найти поле для токенов. Если вы обновляете поле до "not_analyzed" и хотите найти foo из значения "foo bar", вы не сможете этого сделать.

Более грациозным решением является использование фильтров агрегации kibana вместо терминов. Что-то вроде ниже будет искать термины ivr04 и ivr02. Так что в вашем случае вы можете получить фильтр "Привет, я Синьха". Надеюсь, это поможет.

введите описание изображения здесь