我正在尝试使用JDBC河将我的MySQL数据库复制到我的ElasticSearch索引。
然而,每当我启动服务器时,与MySQL表的count(*)相比,这会产生两倍的文档量。我通过清空索引并重新创建映射并重新应用河流来多次测试。
为了完成,这是我的产品索引和产品类型的映射:
{
"products":{
"properties":{
"product_id":{
"type":"string"
},
"naam":{
"type":"string"
},
"merk":{
"type":"string"
},
"lijn":{
"type":"string"
},
"sku":{
"type":"string"
},
"omschrijving":{
"type":"string",
"boost":"0.5"
},
"groep":{
"type":"string"
},
"ean":{
"type":"string",
"boost":"2.0"
},
"kenmerken":{
"type":"nested",
"dynamic":true
},
"levertijd_min":{
"type":"string"
},
"levertijd_max":{
"type":"string"
}
}
}
}
这是我的config.json:
{
"type": "jdbc",
"jdbc":{
"url": "jdbc:mysql://localhost:3306/db",
"strategy":"simple",
"schedule" : "0 */30 8-16 ? * *",
"user":"user",
"versioning":true,
"password":"password",
"sql":"select * from producten_elasticsearch",
"index":"products",
"type":"products",
"autocommit":true,
"timezone":"TimeZone.getDefault()"
}
}
我尝试从策略切换:简单到列然后再返回但是它一直在发生。
这是数据库架构:
如您所见,_id是架构上的PK。
为什么我在弹性搜索索引中看到两倍的文档?
答案 0 :(得分:2)
您是否尝试过比较甚至在Elasticsearch中寻找欺骗?
或者您只是将SQL private void saveAsToolStripMenuItem_Click (object sender, EventArgs e)
{
...
if (result == DialogResult.OK)
{
...
}
else if (result == DialogResult.Cancel)
{
((FormClosingEventArgs) e).Cancel = true;
}
}
查询中的计数与头部插件中的文档计数进行比较?
如果是这种情况,那么您的问题应该是将COUNT(*)
映射为嵌套类型。它们作为单独的文档存储在索引中
在内部,嵌套对象被索引为附加文档,但是, 因为它们可以保证在同一个“块”中被索引,所以它 允许非常快速地加入父文档。
这意味着您导入的一行存储为文档,kenmerken
存储为另一个文档(并链接到,我们将其命名为kenmerken
文档),这意味着一个导入的行,您有两个索引的文档。这就是我如何解释双数。如果情况并非如此 - 请忽略我的回答。