最近项目中使用到搜索文章功能,于是就去调研搜索引擎,最后选择了elasticsearch。
使用过程中碰到了如下问题:
我用的是jdbc-river去同步数据,测试时是写的每隔一分钟去同步一次,结果发现同步
回来的数据和之前的数据都在,刚开始我以为是缓存,后来排查发现是后来每次同步
的数据都追加了造成多个数据。
查看elasticsearch官方文档发现:
For fetching a table, a simple "select *" (star) query can be used. Star queries are the simplest variant of selecting data from a database. They dump tables into Elasticsearch row-by-row. If no _id column name is given, IDs will be automatically generated.
意思是:
抓取一个表,一个简单的“select *”(star)可以使用查询。明星查询从数据库选择数据的简单的变体。他们转储表到Elasticsearch逐行。如果没有_id列名,IDs将自动生成。
所以抓取数据时指定一个_id列名,问题就解决了。
例如:我之前的sql语句是:select * from article;
改为:select *,article_id as _id from article;
就ok了。