json 当尝试在弹性中启用搜索建议字段时,从SQL Server导入Logstash有困难

0s0u357o  于 12个月前  发布在  SQL Server
关注(0)|答案(1)|浏览(126)

使用SQL Server表作为我的基础,列ID(nvarchar),标题(nvarchar),教师(nvarchar),网站类别(nvarchar);我打算利用elasticsearchMap和一个名为suggest的字段来实现专门针对Columns Title和Teacher的搜索建议功能。我发现错误的原因是我的Logstash .conf文件的输出部分的脚本和scipt_params json对象,语法可能不正确,但不知道如何修复它!感谢每一个提示和帮助。我遇到了一些现象,比如Logstash多次摄取每一行,导致比预期更多的文档:1000个文件扔回去365000个文件!这正常吗?我保证所有的路由都是可用的,如template.json和证书路径等。CPU_arch:X86_64,操作系统:ubuntu 22.04.3 LTS jellyfish CN,ELK_ver installed on my local machine:8.10.2
下面是Logstash_Configuration文件:

input {
 jdbc {
    jdbc_driver_library => "/home/erfan/SearchHerkunft/logstash-8.10.2/lib/mssql-jdbc-12.4.1.jre11.jar"
    jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
    jdbc_connection_string => "jdbc:sqlserver://localhost:1433;database=WebScrapingProject_DB;encrypt=true;trustServerCertificate=true;trustStore=/home/erfan/SearchHerkunft/logstash-8.10.2/config/http_ca.crt"
    jdbc_user => "sa"
    jdbc_password => "Warner123#"
    jdbc_paging_enabled => true
    jdbc_fetch_size => 10
    schedule => "* * * * *"
    statement => "SELECT TOP (1000) [Id]
      ,[Title]
      ,[Teacher]
      ,[WebSiteCategory]
 FROM [WebScrapingProject_DB].[dbo].[Test]"
 }
}

filter {
  mutate {
    copy => { "Id" => "[@metadata][_id]" }
    remove_field => ["Id", "@version"]
  }
  mutate {
    convert => { "[@metadata][_id]" => "string" }
  }
  mutate {
    add_field => { "suggest_input" => "%{[@metadata][Title]}" }
    add_field => { "suggest_input" => "%{[@metadata][Teacher]}" }
    add_field => { "suggest_weight" => 10 }
  }
}

output {
 elasticsearch {
    hosts => ["https://localhost:9200"]
    ssl => true
    ssl_certificate_verification => true
    cacert => '/home/erfan/SearchHerkunft/logstash-8.10.2/config/http_ca.crt'
    user => "elastic"
    password => "AE1Qj2*vb73VIkpp4Nyh"
    index => "yabland"
    document_id => "%{[@metadata][_id]}"
    document_type => "_doc"
    routing => "%{[@metadata][_id]}"
    template => '/home/erfan/SearchHerkunft/logstash-8.10.2/config/template.json'
 }
}

输出部分提到的template.json:

{
  "index_patterns": ["yabland-*"],
  "mappings": {
    "properties": {
      "id": { "type": "keyword" },
      "title": { "type": "text" },
      "teacher": { "type": "text" },
      "webSiteCategory": { "type": "text" },
      "suggest": { "type": "completion", "analyzer": "simple" }
    }
  }
}

此外,您将看到用于执行Logstash的终端命令,引用.conf文件,如下所示:

erfan@erfan-SVF14218SAW:~/SearchHerkunft/logstash-8.10.2$ bin/logstash -f ~/SearchHerkunft/logstash-8.10.2/config/sqlJDBC.conf

预计将运行并开始进入elasticsearch服务的管道

b4lqfgs4

b4lqfgs41#

有两个问题。
第一个问题是,在您的Map中,suggest都是

"suggest": { "type": "completion", "analyzer": "simple" }
   ^
   |

在你的脚本中,字段有一个初始值,

ctx._source.Suggest
            ^
            |
       change this

其次,你得到的错误是因为在elasticsearch输出中没有script_params设置。您需要使用params.event.get('field')语法访问事件字段。所以你的脚本应该看起来像这样:

script => "ctx._source.suggest = [ 'input': [params.event.get('title'), params.event.get('teacher')], 'weight': 10]"

此外,我不知道你为什么要使用action => updatedoc_as_upsert。为什么不简单地索引每个记录而不诉诸脚本?我将简单地在过滤器部分中构建建议字段。

相关问题