Node.js Db的数据不断地以点击量的形式堆积起来
我通过链接Mariadb与elasticsearch和logstash来实现搜索功能 顺便说一下 顺便说一下,每次我从logsdbash的mariadb中得到一个值,该值都会在elasticsearch的命中中累积 我想知道怎么了 elasticsearch.yml logstash.conf nodeJS 伐木场 我每分钟都从产品表中获取数据 弹性搜索 每当logstash每分钟从products表中获取数据时,它就会以命中数的形式累积Node.js Db的数据不断地以点击量的形式堆积起来,node.js,elasticsearch,mariadb,logstash,Node.js,elasticsearch,Mariadb,Logstash,我通过链接Mariadb与elasticsearch和logstash来实现搜索功能 顺便说一下 顺便说一下,每次我从logsdbash的mariadb中得到一个值,该值都会在elasticsearch的命中中累积 我想知道怎么了 elasticsearch.yml logstash.conf nodeJS 伐木场 我每分钟都从产品表中获取数据 弹性搜索 每当logstash每分钟从products表中获取数据时,它就会以命中数的形式累积 我看到logstash每分钟从产品数据库中获取一次aaa
我看到logstash每分钟从产品数据库中获取一次aaaa/sunglass/alanmikle行,然后将其插入elasticsearch。数据库的同一行将每分钟重复一次,一次又一次。有两种方法可以解决这个问题 首先,您可以使用过滤器为行生成唯一id,并将其设置为elasticsearch输出上的选项。这将导致每分钟提取和覆盖一次该行。这是非常低效的,但会得到您想要的结果
其次,如果数据库包含一个列,该列是序列或时间戳,可用于标识新行,那么您可以使用jdbc插件的管理功能,它会将该列的值持久化为:sql\u last\u值,以便在仅获取新行的WHERE子句中使用。我看到logstash每隔一分钟从产品数据库获取aaaa/sunglass/alanmikle行,然后将其插入elasticsearch。数据库的同一行将每分钟重复一次,一次又一次。有两种方法可以解决这个问题 首先,您可以使用过滤器为行生成唯一id,并将其设置为elasticsearch输出上的选项。这将导致每分钟提取和覆盖一次该行。这是非常低效的,但会得到您想要的结果
其次,如果数据库包含一个列,该列是序列或时间戳,可用于标识新行,那么您可以使用jdbc插件的管理功能,它会将该列的值持久化为:sql_last_value,以便在仅获取新行的WHERE子句中使用。累积了什么值?根据logstash.conf输入中设置的计划,每次在数据库中更新数据时,它都会在命中时不断累积。不幸的是,您的问题非常不清楚。我不太明白你对点击量的积累是什么意思。如果我不得不猜测,也许您需要为logstash输入设置一个跟踪列{jdbc{statement=>SELECT id,mycolumn1,mycolumn2 FROM my_table,其中id>:sql_last_value use_column_value=>true tracking_column=>id…其他配置位}或者,您可能需要为elastic确定一个ID列,以便您的产品得到更新,而不是无限期地添加?累积了多少值?根据logstash.conf输入中设置的计划,每次数据库中的数据更新时,都会不断累积。不幸的是,您的问题非常不清楚。我不太明白你对点击量的积累是什么意思。如果我不得不猜测,也许您需要为logstash输入设置一个跟踪列{jdbc{statement=>SELECT id,mycolumn1,mycolumn2 FROM my_table,其中id>:sql_last_value use_column_value=>true tracking_column=>id…其他配置位}或者您需要为elastic确定一个ID列,以便您的产品得到更新,而不是无限期地添加?
# ---------------------------------- Cluster -----------------------
cluster.name: nov-cluster
# ------------------------------------ Node ------------------------
node.name: nov-node1
# ---------------------------------- Network -----------------------
network.host: 0.0.0.0
http.port: 9200
input {
stdin { }
jdbc {
jdbc_driver_library => "/usr/local/logstash/lib/mariadb-java-
client-2.4.3.jar"
jdbc_driver_class => "org.mariadb.jdbc.Driver"
jdbc_connection_string =>
"jdbc:mariadb://localhost:3306/Novtree_ShoppingMall?user=root"
jdbc_user => "root"
schedule => "* * * * *"
statement => "SELECT * FROM products"
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "novtree_shoppingmall"
}
stdout {
codec => rubydebug
}
}
const { Client } = require('@elastic/elasticsearch')
router.post('/', async (req, res) => {
try {
const { body } = await esClient.search({
index: 'novtree_shoppingmall',
body: {
query: {
multi_match : {
query: req.body.search,
fields: [ 'title', 'content' ],
minimum_should_match: 3,
}
}
}
})
res.render('index', {
hits: body.hits.hits,
nonUser: req.nonUser
});
} catch (e) {
console.error(e);
}
});