我刚刚开始使用Solr。在我的数据库中,我有一个包含两种实体的文件夹集合,我们可以将它们称为桶和猴子。文件夹包含桶和桶包含猴子。用户应该能够搜索桶和猴子,但只允许他们查看某些文件夹,并且搜索不应该在不允许看到的文件夹中返回桶或猴子。我有一个过滤器查询,它可以很好地管理桶,但是我无法获取数据导入处理程序来导入猴子的文件夹ID。我的data-config文件如下所示:
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/myDB" user="myUser" password="pass"/>
<document name="item">
<entity name="barrels" query="select * from barrels where is_deleted=0" transformer="TemplateTransformer"
deltaQuery="select barrel_id from barrels where last_modified > '${dataimporter.last_index_time}'">
<field column="itemType" template="barrels" name="itemType"/>
<field column="barrel_id" name="id" pk="true" template="barrel-${barrels.barrel_id}"/>
<!--Other fields-->
<field column="folder_id" name="folder_id"/>
</entity>
<entity name="monkeys" query="select * from monkeys where is_deleted=0" transformer="TemplateTransformer"
deltaQuery="select monkey_id from monkeys where last_modified > '${dataimporter.last_index_time}'">
<field column="itemType" template="monkeys" name="itemType"/>
<field column="monkey_id" name="id" pk="true" template="monkey-${monkeys.monkey_id}"/>
<field column="barrel_id" name="barrel_id"/>
<!--Other fields-->
<entity name="barrels"
query="select folder_id from barrels where barrel_id='${monkeys.barrel_id}'">
<field name="folder_id" column="folder_id" />
</entity>
</entity>
</document>
</dataConfig>
当我更改&#39; $ {monkeys.barrel_id}&#39;在28的外键查询中,它可以工作,但是当我尝试使用正确的id时,它不会导入任何内容。
有人能发现我做错了什么,或者告诉我调试这种事情的好方法吗?例如。我怎样才能告诉我它有什么价值?$ {monkeys.barrel_id}&#39; ?所有相关字段都在schema.xml中定义。由于遇到这个问题,我确保所有文档都与表格具有相同的名称,并尝试将各种查询更改为大写,但数据库中的所有内容都是小写的,并且它没有&#39似乎有所帮助。
答案 0 :(得分:0)
在提出问题之后,我确实设法最终解决了这个问题。这是我学到的东西:
1)让它告诉你查询非常有用,只需将日志记录级别设置为罚款即可。你必须在所有相关的地方把它设置得很好。所以对于我的Standalone.xml(在WildFly中),除了
dimens.xml
位,我需要将文件记录器和另一个记录位设置为罚款。真的应该早点意识到......
2)单引号不是表达式评估语法的一部分,它们只是引号。因此在处理整数时你不需要它们。我想solr附带的例子使用字符串id而不是int id,这就是为什么它有引号?
3)一旦我删除了引号,改变案例确实有所作为。对于我的数据库,由于某种原因,它的首选案例是Barrel_ID。我没有尝试过两端的大写但不是在中间,但那是有效的。所以我想这个故事的寓意是,即使看起来很傻也要尝试很多不同的案例。