3

我们正在尝试将 OpenCMS 结构化内容 XML 字段映射到 SOLR 字段,以便使用该字段作为过滤器执行搜索。

XML 字段在 XSD 文件中是这样描述的:

<xsd:complexType name="OpenCmsContrato">
    <xsd:sequence>
    [...]
        <xsd:element name="numeroExpediente" type="OpenCmsString" minOccurs="1" maxOccurs="1" />
    [...]
    </xsd:sequence>
    <xsd:attribute name="language" type="OpenCmsLocale" use="required"/>
</xsd:complexType>

这些是元素的搜索设置,在同一个 XSD 文件中定义:

<xsd:annotation>
    <xsd:appinfo>
    [...]
        <searchsettings>
            <searchsetting element="numeroExpediente" searchcontent="true">
                <solrfield targetfield="numexp" />
            </searchsetting>
        </searchsettings>
    [...]
    </xsd:appinfo>
</xsd:annotation>

目标 SOLR 字段“numexp”在 SOLR 的 schema.xml 文件中以这种方式定义:

<fields>
    <field name="numexp"                 type="string"       indexed="true"  stored="true" />
    [...]
</fields>

这就是我们对 JSP 文件执行 SOLR 查询的方式:

CmsSearchManager manager = OpenCms.getSearchManager();
CmsSolrIndex index = manager.getIndexSolr("Solr Online");

String query = "fq=type:contrato";

if (!"".equals(text))
    query += "&fq=numexp:" + text;

CmsSolrResultList listFiles = index.search(cmso, query);

当我们执行此代码时,我们得到 listFiles.size() = 0,但是当我们将过滤字段更改为预定义的 SOLR 字段“内容”时,这样:

if (!"".equals(text))
    query += "&fq=content:" + text;

我们得到了预期的结果。

通过我们使用“content” SOLR 字段作为过滤器获得的 CmsSearchResource 对象,我们能够迭代其内部 I_CmsSearchDocument 的字段,得到以下列表作为结果:

id
contentblob
path
type
suffix
created
lastmodified
contentdate
relased
expired
res_locales
con_locales
template_prop
default-file_prop
notification-interval_prop
NavPos_prop
enable-notification_prop
locale_prop
NavText_prop
Title_prop
category
ca_excerpt
timestamp
score
link

列表中不存在“numexp”字段。为什么?我们是否缺少任何步骤?我们是否必须配置其他东西才能使映射工作?

4

2 回答 2

2

几个月前我遇到了同样的问题。我认为这是你的问题

<searchsetting element="numeroExpediente" searchcontent="true">
     <solrfield targetfield="numexp" />
</searchsetting>

你必须改变这个

<searchsetting element="numeroExpediente" searchcontent="true">
     <solrfield targetfield="numexp" sourcefield="*_s" />
</searchsetting>

您必须设置 solrfield 的类型,查看 SOLR 的 schema.xml 中的不同类型,我为博客元素中的某个类别执行此操作。在 v9.0.1 中工作

于 2014-07-04T23:47:50.293 回答
1

我们遇到了同样的问题。问题是 SOLR 不会自己索引嵌套内容,你必须说是否应该索引该字段。

例如,假设我们有一个事件 XSD,其中包含有关事件和公司的信息:

<xsd:complexType name="OpenCmsEvent">
    <xsd:sequence>
        <xsd:element name="EventInformation" type="OpenCmsEventInformation" minOccurs="1" maxOccurs="1" />
        <xsd:element name="EventHost" type="OpenCmsEventHost" minOccurs="0" maxOccurs="1" />
    </xsd:sequence>
    <xsd:attribute name="language" type="OpenCmsLocale" use="required" />
</xsd:complexType>

我们想知道来自 Eventhost 的公司链接

<xsd:complexType name="OpenCmsEventHost">
    <xsd:sequence>
        <xsd:element name="company" type="OpenCmsVfsFile" minOccurs="1" maxOccurs="unbounded" />
    </xsd:sequence>
    <xsd:attribute name="language" type="OpenCmsLocale" use="optional" />
</xsd:complexType>

以下映射将为我们提供我们想要的信息

<searchsettings>
    <searchsetting element="EventHost/company" searchcontent="true">
            <solrfield targetfield="companyurl"/>
    </searchsetting>
</searchsettings>

在现有资源上执行此操作时,不要忘记重新索引您的太阳能索引!

于 2017-12-04T12:31:19.510 回答