ElasticSearch JDBC River 创建重复项
ElasticSearch JDBC River creates duplicates
我正在尝试使用 JDBC 河流将我的 MySQL 数据库复制到我的 ElasticSearch 索引。
然而,与我每次启动服务器时 MySQL table 的计数 (*) 相比,这会创建两倍数量的文档。我通过清空索引并重新创建映射并重新应用河流进行了多次测试。
为了完整起见,这是我的产品索引和产品类型的映射:
{
"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()"
}
}
我尝试从 strategy: simple 切换到 column 并再次返回,但它一直在发生。
这是数据库模式:
如您所见,_id 是架构上的 PK。
为什么我在 elasticsearch 索引中看到两倍的文档?
您是否尝试过在 Elasticsearch 中比较甚至寻找重复项?
或者您只是将 SQL COUNT(*)
查询的计数与 head 插件中的文档计数进行比较?
如果是这样,那么您的问题应该是您将 kenmerken
映射为嵌套类型。它们作为单独的文档存储在您的索引中
Internally, nested objects are indexed as additional documents, but,
since they can be guaranteed to be indexed within the same "block", it
allows for extremely fast joining with parent docs.
这意味着您导入的一行存储为文档,kenmerken
存储为另一个文档(并链接到,让我们命名为 core
文档),这意味着对于一个导入的行,您有两个文档被索引。这就是我可以解释双数的方式。如果不是这样 - 请忽略我的回答。
我正在尝试使用 JDBC 河流将我的 MySQL 数据库复制到我的 ElasticSearch 索引。
然而,与我每次启动服务器时 MySQL table 的计数 (*) 相比,这会创建两倍数量的文档。我通过清空索引并重新创建映射并重新应用河流进行了多次测试。
为了完整起见,这是我的产品索引和产品类型的映射:
{
"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()"
}
}
我尝试从 strategy: simple 切换到 column 并再次返回,但它一直在发生。
这是数据库模式:
如您所见,_id 是架构上的 PK。
为什么我在 elasticsearch 索引中看到两倍的文档?
您是否尝试过在 Elasticsearch 中比较甚至寻找重复项?
或者您只是将 SQL COUNT(*)
查询的计数与 head 插件中的文档计数进行比较?
如果是这样,那么您的问题应该是您将 kenmerken
映射为嵌套类型。它们作为单独的文档存储在您的索引中
Internally, nested objects are indexed as additional documents, but, since they can be guaranteed to be indexed within the same "block", it allows for extremely fast joining with parent docs.
这意味着您导入的一行存储为文档,kenmerken
存储为另一个文档(并链接到,让我们命名为 core
文档),这意味着对于一个导入的行,您有两个文档被索引。这就是我可以解释双数的方式。如果不是这样 - 请忽略我的回答。