elasticsearch,mariadb,logstash,Node.js,elasticsearch,Mariadb,Logstash" /> elasticsearch,mariadb,logstash,Node.js,elasticsearch,Mariadb,Logstash" />

Node.js Db的数据不断地以点击量的形式堆积起来

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

我通过链接Mariadb与elasticsearch和logstash来实现搜索功能

顺便说一下

顺便说一下,每次我从logsdbash的mariadb中得到一个值,该值都会在elasticsearch的命中中累积

我想知道怎么了

elasticsearch.yml

logstash.conf

nodeJS

伐木场

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

弹性搜索

每当logstash每分钟从products表中获取数据时,它就会以命中数的形式累积


我看到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);
  }
});