从logstash

时间:2017-09-07 21:26:32

标签: elasticsearch logstash nest logstash-configuration logstash-jdbc

我正在尝试将数据从Sql Server加载到ElasticSearch中。我正在使用带有jdbc插件和弹性搜索插件的Logstash。我在ElasticSearch中加载我的数据,但无法弄清楚如何设置我的索引。我正在使用模板索引来试试这个。以下是我正在使用的内容,但每当我搜索时,我都没有得到任何结果。

logstash.config

# contents of logstash\bin\logstash.config

input {
  jdbc {
    jdbc_driver_library => ".\Microsoft JDBC Driver 6.2 for SQL Server\sqljdbc_6.2\enu\mssql-jdbc-6.2.1.jre8.jar"
    jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
    jdbc_connection_string => "jdbc:sqlserver://mydbserver;databaseName=mydb;"
    jdbc_user => "******"
    jdbc_password => "******"
    schedule => "* * * * *"
    parameters => { "classification" => "EMPLOYEE" }
    statement => "SELECT Cost_Center, CC_Acct_1, CC_Acct_2, CC_Acct_3 from dbo.Cost_Center where CC_Classification = :classification"
  }
}
output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "allocation-testweb"
    template => "index_template.json"
  }
  #stdout { codec => rubydebug }
}

index_template.json

{
"template": "allocation-*",
"order":1,
"settings": {
    "number_of_replicas": 0,
    "number_of_shards": 1,
    "analysis": {
        "analyzer": {
            "substring_analyzer": {
                "tokenizer": "ngram_tokenizer",
                "filter": ["lowercase"]
            }
        },
        "tokenizer": {
            "ngram_tokenizer": {
                "type": "edge_ngram",
                "min_gram": 2,
                "max_gram": 10,
                "token_chars": ["letter","digit"]
            }
        }
    }
},
"mappings":{
    "costcenter": {
        "properties": {
            "cc_acct_1": {
                "type": "string",
                "analyzer": "substring_analyzer"
            },
            "cc_acct_2": {
                "type": "string",
                "analyzer": "substring_analyzer"
            }
        }
    }
}

我在进行一些初步研究时已经在代码中创建了类似的索引。我的index_template是不正确的还是我应该采取另一种方式?

更新: 我的两个文件之间的索引名称不匹配。我现在能够使用Postman和curl进行搜索。但是,当我尝试使用NEST客户端获取数据时,我永远无法获取数据。以下是查询的代码段。

  var searchResult = client.Search<CostCenter>(s => s  
    .Size(1000)
    .Index("allocation_testweb")
    .MatchAll());

以前使用从文件加载的相同数据。 CostCenter只是一个名为Cost_Center,CC_Acct_1,CC_Acct_2和CC_Acct_3的成员对象。我再次肯定我过度使问题变得复杂并且遗漏了一些明显的东西。

更新II:

我已经在下面的@RussCam中进行了更改,但仍然没有得到任何结果。以下是我更新的代码。

var node = new Uri("http://localhost:9200");
var settings = new ConnectionSettings(node); 
     //.InferMappingFor<CostCenter>(m => m.IndexName("allocation_testweb"));
var client = new ElasticClient(settings);

var searchResult = client.Search<CostCenter>(s => s
    .Type("costCenter")
    .Size(1000)
    .Index("allocation_testweb")
    .MatchAll());

我注释掉了InferMappingFor&lt;&gt;因为它没有提供结果。

映射@RussCam请求的图像。我还包括了我的costcenter类(我已尝试命名costcenter的所有变体)。

public class costcenter
{
  public string cost_center { get; set; }
  public string cc_acct_1 { get; set; }
  public string cc_acct_2 { get; set; }
  public string cc_acct_3 { get; set; }
}

enter image description here

0 个答案:

没有答案