node.js - Db的数据不断增加

标签 node.js elasticsearch mariadb logstash

我通过将Mariadb与elasticsearch和logstash链接来进行搜索。

顺便说说..

顺便说一句,每当我从logsdbash的mariadb中获得一个值时,该值就会累积在elasticsearch命中中。

我想知道怎么了

elasticsearch.yml

# ---------------------------------- Cluster -----------------------
  cluster.name: nov-cluster
# ------------------------------------ Node ------------------------
  node.name: nov-node1
# ---------------------------------- Network -----------------------
  network.host: 0.0.0.0
  http.port: 9200

logstash.conf
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
  }
}

nodeJS
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);
  }
});

logstash

我每分钟都会从产品表中获取数据

logstash result img

elasticsearch

每当logstash每分钟从products表中获取数据时,它就会累积点击数。

elasticsearch result img

最佳答案

我看到,每分钟logstash从产品数据库中获取aaaa / sunglass / alanmikle行,然后将其插入elasticsearch。数据库的同一行将每分钟重复一次。有两种解决方法。

首先,您可以使用fingerprint过滤器为该行生成唯一的ID,并将其设置为elasticsearch输出上的document_id选项。这将导致该行每分钟被提取并覆盖一次。这是非常低效的,但是可以提供所需的结果。

其次,如果数据库包含可以用来标识新行的序列或时间戳列,则可以使用jdbc插件的state管理功能,它将该列的值持久化为:sql_last_value在仅获取新行的WHERE子句中使用。

关于node.js - Db的数据不断增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57454807/

相关文章:

elasticsearch - Kibana绘制图表只是度量的差异而不是总数

elasticsearch - 唯一计数,数组到字符串

php - 使用 laravel 5 在表上创建一个新的字符串列

node.js - 自动重新加载 Koa 服务器

elasticsearch - Elasticsearch:聚合过滤后的嵌套对象以查找唯一值

mysql - 有很多左连接的慢查询

php - MariaDB/MySQL : combine rows if fields are NULL

node.js - 无法在NodeJS中解决: 'TypeError: Converting circular structure to JSON'

javascript - 在nodejs中从post请求解析json文件的最佳方法

node.js - .npmrc 忽略了私有(private)包