使用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服务的管道
1条答案
按热度按时间b4lqfgs41#
有两个问题。
第一个问题是,在您的Map中,
suggest
都是在你的脚本中,字段有一个初始值,
其次,你得到的错误是因为在elasticsearch输出中没有
script_params
设置。您需要使用params.event.get('field')
语法访问事件字段。所以你的脚本应该看起来像这样:此外,我不知道你为什么要使用
action => update
和doc_as_upsert
。为什么不简单地索引每个记录而不诉诸脚本?我将简单地在过滤器部分中构建建议字段。