3

我会尝试放置一个 xml 文档SOLR(现在我使用的是 7.3.0 版本)而不在 data-config 中设置特定字段或放置一个标签来获取所有其他标签。我尝试使用无模式模式,但没有得到任何文档。是否有可能以某种方式做这件事,或者SOLR无法处理?

这是我的 SOLR document.xml 的一个示例。我想检测所有标签并取回相对值而不编辑任何字段。就像我说的,我尝试了无模式模式,但它没有用。

<?xml version="1.0" encoding="UTF-8"?>
<digital_archive xmlns="https://www.site" dataCreazione="2017-05-11T17:15:00">
<DocumentalCategory>some data</DocumentalCategory>
<customer>some data</customer>
<producer>some data</producer>
<documentOwner>some data</documentOwner>
<sources>
    <source>
        <idc>
            <id scheme="adfr">some data</id>
            <name>some data</name>
            <path>sources\source\some_path.XML</path>
            <hash alg="SHA-256">3748738</hash>
        </idc>
        <vdc>
            <id scheme="some data">some data.XML</id>
            <timeReference>2017-03-17T14:19:01+0100</timeReference>
        </vdc>
    </source>
</sources>
<ud>
    <metadati>
        <Name>Jane</Name>
        <Surname>Doe</Surname>
        <FiscalCode>dsrsd6w7hedw</FiscalCode>
        <Date>29.10.2017</Date>
    </metadati>

我期望的结果是这样的:

    <field name="DocumentalCategory">some data</DocumentalCategory>
<field name="customer">some data</customer>
<field name="producer">some data</producer>
<field name="documentOwner">some data</documentOwner>
<field name="sources">
    <field name="source">
        <field name="idc">
            <field name="id" scheme="adfr">some data</id>
            <field name="name">some data</name>
            <field name="path">sources\source\some_path.XML</path>
4

2 回答 2

2

Solr 不是数据库,它是一个搜索引擎。它的目标是为您提供良好的搜索结果,而保留原始结构则不那么重要。

虽然有一些方法可以获取嵌套文档,但您会发现之后的搜索会让您真正重新考虑您的导入过程。

因此,我建议您退后一步,考虑如何首先找到此信息以及将返回什么级别的记录/子记录。然后您可以重新访问导入问题。

无模式模式在这里对您没有帮助,因为它仍然希望您的文档是 Solr 格式,无论是 XML、JSON 还是 CSV。这里有一个自定义 XML 格式。因此,您需要以某种方式对其进行转换。您可以使用 Data Import Handler 并在输入过程中定义映射或 XSLT 转换,以使其符合 Solr 的期望。无论哪种方式,您很可能都必须进行一些扁平化和 id 映射。

于 2018-05-17T11:44:55.383 回答
1

使用 xslt 将您的自定义 xml 转换为 solr xml 可理解的架构下面是我的 xml:-

 <?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="Rule.xsl"?>
<collection>
  <movie>
      <title>abc</title>
      <year>2016</year>
      <genre>comedy</genre>
  </movie>
  <movie>
      <title>xyz</title>
      <year>2017</year>
      <genre>animated</genre>
  </movie>
  <movie>
      <title>pqr</title>
      <year>2018</year>
      <genre>action</genre>
  </movie>
</collection>

下面是我执行转换的 xsl 文件:-

    <?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match='/collection'>
    <add>
      <xsl:apply-templates select="movie"/>
    </add>
  </xsl:template>
  <!-- Ignore score (makes no sense to index) -->
  <xsl:template match="movie/*[@name='score']" priority="100"></xsl:template>
  <xsl:template match="movie">
    <xsl:variable name="pos" select="position()"/>
    <doc>
      <xsl:apply-templates>
        <xsl:with-param name="pos"><xsl:value-of select="$pos"/></xsl:with-param>
      </xsl:apply-templates>
    </doc>
  </xsl:template>
  <!-- Flatten arrays to duplicate field lines -->
  <xsl:template match="movie/arr" priority="100">
    <xsl:variable name="fn" select="@name"/>
    <xsl:for-each select="*">
      <xsl:element name="field">
        <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
        <xsl:value-of select="."/>
      </xsl:element>
    </xsl:for-each>
  </xsl:template>
  <xsl:template match="movie/*">
    <xsl:variable name="fn" select="@name"/>
      <xsl:element name="field">
        <xsl:attribute name="name"><xsl:value-of select="local-name()"/></xsl:attribute>
      <xsl:value-of select="."/>
    </xsl:element>
  </xsl:template>
  <xsl:template match="*"/>
</xsl:stylesheet>

变形版:

    <add>
   <doc>
      <field name="title">abc</field>
      <field name="year">2016</field>
      <field name="genre">comedy</field>
  </doc>
   <doc>
      <field name="title">xyz</field>
      <field name="year">2017</field>
      <field name="genre">animated</field>
  </doc>
   <doc>
      <field name="title">pqr</field>
      <field name="year">2018</field>
      <field name="genre">action</field>
  </doc>
</add>

在线 xslt url:在此处输入链接描述

于 2020-03-06T14:22:16.900 回答