我正在使用Elasticsearch-JDBC导入器创建和索引从我的数据库索引一些内容,其中包含子父关系。
item
是父级,user_item_relation
是孩子。
这是映射:
curl -XPUT 'localhost:9200/testindex?pretty=true' -d '{
"mappings": {
"item": {
"dynamic": "strict",
"properties" : {
"title" : { "type": "string" },
"body" : { "type": "string" }
}},
"user_item_relation": {
"dynamic": "strict",
"_parent": {"type": "item" },
"properties" : {
"item_id" : { "type": "integer" },
"source_id" : { "type": "integer" }
}}}}'
这是我用来导入类型item
(父级)的脚本。
脚本的名称为item_indexer.sh
:
#!/bin/sh
bin=/usr/share/elasticsearch/elasticsearch-jdbc-2.1.1.2/bin
lib=/usr/share/elasticsearch/elasticsearch-jdbc-2.1.1.2/lib
echo "Indexing..."
echo '{
"type" : "jdbc",
"jdbc" : {
"url" : "jdbc:mydbip/mydbname",
"user" : "username",
"password" : "pw",
"sql" : "select title, body, id as _id from table_item",
"index" : "testindex",
"type" : "item"
}
}' | java \
-cp "${lib}/*" \
-Dlog4j.configurationFile=${bin}/log4j2.xml \
org.xbib.tools.Runner \
org.xbib.tools.JDBCImporter
..这是我用来导入类型user_item_relation
(孩子们)的脚本。脚本的名称为user_item_relation_indexer.sh
:
#!/bin/sh
bin=/usr/share/elasticsearch/elasticsearch-jdbc-2.1.1.2/bin
lib=/usr/share/elasticsearch/elasticsearch-jdbc-2.1.1.2/lib
echo "Indexing..."
echo '{
"type" : "jdbc",
"jdbc" : {
"url" : "jdbc:mydbip/mydbname",
"user" : "username",
"password" : "pw",
"sql" : "select source_id, item_id, id as _id from table_user_item_relation",
"index" : "testindex",
"type" : "user_item_relation"
}
}' | java \
-cp "${lib}/*" \
-Dlog4j.configurationFile=${bin}/log4j2.xml \
org.xbib.tools.Runner \
org.xbib.tools.JDBCImporter
要索引所有内容,我首先索引并运行索引item_indexer.sh
的父(item
)的脚本,当它完成时,我运行子代的脚本({ {1}})索引user_item_relation_indexer.sh
。
如果我首先索引父级,然后是子级,则一切正常。
所以我的问题是:是否可以同时运行这两个脚本,并将索引编入索引?或者首先需要索引所有父文档然后索引子文档?
我无法尝试,因为它现在正在索引,我不想失去它已经编入索引的3h。