配置搜索字段

在某些情况下,修改或扩展元数据索引的搜索字段是相关的。例如,添加一个字段(然后可以搜索或在默认视图中使用)或更改字段的内容是根据元数据创建的(索引)。

整个索引的字段数量和类型在以下位置管理:

接下来,在每个模式插件中,您可以定义如何从文件中的元数据内容填充新字段:

Lucene 是GeoNetwork使用的搜索引擎。所有Lucene配置都在WEB-INF/config中定义-lucene.xml文件.

添加搜索字段

索引字段是根据模式文件夹(如WEB-INF/data/config/schema_plugins/iso19139/index fields)中的每个模式定义的默认.xsl文件。此文件为每个搜索条件定义元数据记录中的相应元素。例如,索引ISO19139记录的标题:

<xsl:for-each select="gmd:identificationInfo/gmd:MD_DataIdentification/
                       gmd:citation/gmd:CI_Citation/
                       gmd:title/gco:CharacterString">
    <Field name="mytitle" string="{string(.)}" store="true" index="true"/>
</xsl:for-each>

通常,如果该字段仅用于搜索且不应显示在搜索结果中,则可以将store属性设置为false。

一旦该字段添加到索引中,用户就可以在不同类型的搜索服务中使用它作为搜索条件进行查询。例如,使用:

http://localhost:8080/geonetwork/srv/en/q?mytitle=africa

如果用户希望将此字段标记化,则应将其添加到配置的标记化部分-lucene.xml文件:

<tokenized>
  <Field name="mytitle"/>

如果用户希望在搜索服务的搜索结果中返回此字段,则应将该字段添加到dumpFields部分中的Lucene配置:

<dumpFields>
  <field name="mytitle" tagName="mytitle"/>

提升文档和字段

文档和字段增强允许目录管理员自定义默认Lucene评分,以便升级某些类型的记录。

一个常见的用例是当目录包含大量用于聚合数据集的序列时。即使这些记录包含重要内容,不推广该系列也可能使该系列变得“无用”。提升这类文档可以提升序列,并引导最终用户从序列到相关记录(通过关系导航)。

在这种情况下,以下配置允许提升序列和序列中记录部分的次要重要性:

<boostDocument name="org.fao.geonet.kernel.search.function.ImportantDocument">
  <Param name="fields" type="java.lang.String" value="type,parentUuid"/>
  <Param name="values" type="java.lang.String" value="series,NOTNULL"/>
  <Param name="boosts" type="java.lang.String" value=".2F,-.3F"/>
</boostDocument>

升压是一个正浮点数或负浮点数。

专家用户必须使用此功能根据目录内容更改默认搜索行为评分。它需要调整和实验,以避免提升太多的一些记录。在测试过程中,如果搜索结果在记录与否时看起来不一样,那么可以忽略boost计算中的一些内部字段,这些字段可能会根据当前用户改变评分。配置示例:

<fieldBoosting>
  <Field name="_op0" boost="0.0F"/>
  <Field name="_op1" boost="0.0F"/>
  <Field name="_op2" boost="0.0F"/>
  <Field name="_dummy" boost="0.0F"/>
  <Field name="_isTemplate" boost="0.0F"/>
  <Field name="_owner" boost="0.0F"/>
</fieldBoosting>

提升搜索结果

默认情况下,Lucene根据搜索条件、相应的结果集和索引内容计算分数。如果搜索没有条件,Lucene将按索引顺序返回顶级文档(因为没有比其他文档更相关)。

为了改变分数计算,可以定义一个boost函数。需要在类路径中加载Boosting查询。提供了一个示例boosting类。RecencyBoostingQuery将升级最近修改的文档:

<boostQuery name="org.fao.geonet.kernel.search.function.RecencyBoostingQuery">
  <Param name="multiplier" type="double" value="2.0"/>
  <Param name="maxDaysAgo" type="int" value="365"/>
  <Param name="dayField" type="java.lang.String" value="_changeDate"/>
</boostQuery>