Solr dataImportHandler 中的外键引用

Foreign key references in Solr dataImportHandler

我刚开始使用 Solr。在我的数据库中,我有一组包含两种实体的文件夹,我们称它们为桶和猴子。文件夹包含桶,桶包含猴子。用户应该能够搜索 barrels 和 monkeys,但他们只能看到特定的文件夹,搜索不应该 return barrels 或 monkeys 在他们不允许看到的文件夹中。我有一个过滤器查询可以很好地处理桶,但我无法让数据导入处理程序为猴子导入文件夹 ID。我的数据配置文件如下所示:

<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>

当我将外键查询中的“${monkeys.barrel_id}”更改为 28 时,它起作用了,但是当我尝试让它使用正确的 ID 时,它没有导入任何东西。

任何人都可以发现我做错了什么,或者告诉我调试这种事情的好方法吗?例如。我怎样才能让它告诉我它对 '${monkeys.barrel_id}' 有什么价值? schema.xml 中定义了所有相关字段。自从遇到这个问题后,我确保所有文档都与表同名,并尝试将各种查询更改为大写,但数据库中的所有内容都是小写的,这似乎没有帮助。

在问了这个问题之后,我终于弄明白了。这是我学到的:

1) 让它告诉您查询非常有用,只需将日志记录级别设置为正常即可。不过,您必须在所有相关位置将其设置为正常。所以对于我的 Standalone.xml(在 WildFly 中),除了

<logger category="org.apache.solr">
    <level name="FINE"/>
</logger>

位,我需要将文件记录器和另一个记录位设置为正常。真应该早点意识到...

2) 单引号不是表达式求值语法的一部分,它们只是引号。所以你在处理整数时不需要它们。我想 solr 附带的示例使用字符串 id 而不是 int id,这就是它有引号的原因?

3) 去掉引号后,改变大小写确实有所不同。对于我的数据库,出于某种原因,它的首选情况是 Barrel_ID 。我没有在两端尝试过使用大写字母,但在中间没有尝试过,但这就是有效的。所以我想这个故事的寓意是尝试很多不同的案例是值得的,即使它们看起来很愚蠢。