Solr DataImportHandler:我可以使用 XPathEntityProcessor 从 xml 属性获取动态字段名称吗?
我有一些 XML 需要摄取到 Solr 中,这听起来像是一个旨在由 DataImportHandler 解决的用例。我想要做的是从一个 XML 属性中提取列名,并从另一属性中提取值。下面是我的意思的一个例子:
<document>
<data ref="reference.foo">
<value>bar</value>
</data>
</document>
在这个 xml 片段中,我想添加一个名为 reference.foo
和值 bar
的字段。 DataImportHandler 包括用于处理 XML 文档的 XPathEntityProcessor。我尝试过使用它,如果我给它一个已知的列名称(例如
),它就会完美地工作但无法找到任何文档或示例来建议如何做我想做的事,或者无法完成它。那么:
- 我可以使用 XPathEntityProcessor 来做到这一点吗?如果是这样,怎么办?
- 如果没有,我可以使用 DataImportHandler 以其他方式执行此操作吗?
- 或者我是否需要编写自己的导入处理程序?
I have some XML to ingest into Solr, which sounds like a use case that is intended to be solved by the DataImportHandler. What I want to do is pull the column name from one XML attribute and the value from another attribute. Here is an example of what I mean:
<document>
<data ref="reference.foo">
<value>bar</value>
</data>
</document>
From this xml snippet, I want to add a field with name reference.foo
and value bar
. The DataImportHandler includes a XPathEntityProcessor for processing XML documents. I've tried using it and it works perfectly if I give it a known column name (e.g, <field column="ref" xpath="/document/data/@ref">
) but have not been able to find any documentation or examples to suggest either how to do what I want, or that it cannot be done. So:
- Can I do this using XPathEntityProcessor? If so, how?
- If not, can I do this some other way with DataImportHandler?
- Or am I left with writing my own import handler?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我还没有找到一种在不引入变压器的情况下做到这一点的方法,但通过使用一个简单的 ScriptTransformer 我解决了这个问题。它是这样的:
希望对某人有帮助!
请注意,如果您的动态字段是多值的,则必须迭代 theKey,因为 row.get("theKey") 将是一个列表。
I haven't managed to find a way to do this without bringing in a transformer, but by using a simple
ScriptTransformer
I worked it out. It goes something like this:Hope that helps someone!
Note, if your dynamicField is multivalued, you have to iterate over theKey since row.get("theKey") will be a list.
您想要做的是选择基于属性值的节点。
从你的例子来看,你会这样做:
What you want to do is select the node keying on an attribute value.
From your example, you'd do this: