Использование внешнего атрибута в качестве document_id возвращает имя атрибута AS document_id - PullRequest
0 голосов
/ 27 февраля 2020

Всякий раз, когда я пытаюсь назначить document_id с некоторым атрибутом из документов, он создает только один новый документ в ElasticSearch с document_id в качестве имени атрибута, который я пытаюсь использовать. То, что я хочу, - это фактическое количество извлеченных документов, с установленным в качестве первичного ключа в исходной базе данных document_id.

output {
elasticsearch {
hosts => ["placeholder"]
index => "item"
document_id => "%{i.RecordId}"
doc_as_upsert => true
user => "placeholder"
password => "placeholder"
}
}

, в частности, создает новый документ, который выглядит следующим образом;

"_index" : "item",
"_type" : "_doc",
"_id" : "%{i.RecordId}",
"_score" : 1.0,
"_source" : {

Я пробовал несколько разных подходов, таких как копирование записи в поле метаданных, но пока ничего не получалось.

Заранее спасибо за помощь

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Вы можете использовать поле метаданных, как описано в документации здесь: https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-fields.html

Вы должны назначить в своем выводе что-то вроде этого:

output {
elasticsearch {
hosts => ["placeholder"]
index => "item"
document_id => "%{[@metadata][id]}"
doc_as_upsert => true
user => "placeholder"
password => "placeholder"
}
}

и вы должны присвоить значение id в вашем фильтре, например:

mutate {
    add_field => { "[@metadata][id]" => <your_id_var> }
}

В качестве альтернативы вы можете поместить это в свой фильтр:

  fingerprint {                                                                              
     method => "SHA512"                                                                                    `        source => <YOUR SOURCE>                                                                
    target => "[@metadata][fingerprint]"                                          
  }  

и затем поместить document_id в вывод

document_id => "%{[@metadata][fingerprint]}"
0 голосов
/ 04 марта 2020
input {
  jdbc {
    jdbc_connection_string => "jdbc:sqlserver://placeholedr"
    jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
    jdbc_driver_library => "C:\Users\Bruger\Documents\JBDC\sqljdbc_4.2\enu\jre8\sqljdbc42.jar"
    jdbc_user => "sa"
    jdbc_password => "placeholder"
    statement => "SELECT
                  i.RecordId,
                  i.FK_Catalog,
                  i.FK_Unit,
                  c.Name,
                  i.ItemNumber,
                  i.Ean,
                  i.ItemNumber2,
                  i.Description,
                  i.AltDescription,
                  i.IsStandard,
                  i.MarkedForDelete,
                  i.DateCreated,
                  i.DateUpdated,
                  i.ItemNumberNumerical,
                  i.ItemAlias,
                  i.FK_CatalogItemGroup,
                  f.UnitName,
                  i.NetPrice,
                  i.GrossPrice,
                  i.SellingPrice,
                  i.IsSellingPriceCalculated,
                  i.PriceMatrixItemId,
                  i.DiscountPercent,
                  i.DiscountAmount,
                  i.IsActive,
                  i.ItemOnStock,
                  i.AllowanceCharge,
                  w.Name as WholesalerName,
                  w.WholesalerID,
                  wp.Priority
                  from Item as i
                  JOIN Catalog as c on c.RecordId = i.FK_Catalog
                  join Wholesalers w on w.WholesalerID = c.FK_Wholesaler
                  join WholesalerPriority wp on wp.fk_wholesaler = w.WholesalerID
                  JOIN Units f on f.UnitsID = i.FK_Unit 
                  "
  }

}

filter
{
    mutate
        {
            add_field => {"[@metadata][id]" => "[recdordid]"     }      
        }
}



output { 
elasticsearch {
    hosts => [placeholder]
    index => "oegaard"
    doc_as_upsert => true
    document_id => "%{[@metadata][id]}"
    user => "placeholedr"
    password => "placeholder"
  }
}
...