我已经阅读了几个教程,并浏览了Solr文档。但是一件事对我来说并不清楚。让我解释:

让我们的话题应索引以下文件:

<doc>
  <field name="id">R12345</field>
  <field name="title">My title</field>
  <field name="content">My Content</field>
</doc>

与本文档相反,该索引应包含一个称为“ Doctype”的额外字段。该额外的索引字段应使用“完成规则”填写。背后的想法:

如果ID以字符“ R”开头,则将字符串“ Resolve”写入索引中的字段Doctype。如果ID以字符“ C”开头,则将字符串“贡献”写入索引中的字段Doctype。

上述文档应在索引中提供以下字段:

id=R12345
title=My Title
content=My Content
docType=Resolve

我的想法是为此使用分析仪。然后,分析仪的结果像往常一样将分析仪的结果写入索引中的字段“ ID”(仅是原始文本的副本),但结果“解决”或“贡献”应写入另一个字段。

我的基本问题是:如何在Teh Analyzer(Java Senting)中实现?为了使其更加复杂,应该可以搜索索引字段“ Doctype”,并且必须在搜索结果中可用。对于现场ID和Doctype的模式将如何?

预先感谢Tobias

有帮助吗?

解决方案

如果您只需要索引值,则模式方法就足够了。创建一个执行必要处理的新fieldType,创建新类型的字段,然后设置复制字段以从 id:

<fieldType name="doctypeField" class="solr.TextField">
  <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="([CR]).*" replacement="$1" replace="all" />
    <filter class="solr.PatternReplaceFilterFactory" pattern="C" replacement="Contribute" replace="all" />
    <filter class="solr.PatternReplaceFilterFactory" pattern="R" replacement="Resolve" replace="all" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

<field name="doctype" type="doctypeField" indexed="true" stored="false" required="false" />

<copyField source="id" dest="doctype"/>

您可能需要注意,您不会从中获得存储的值。如果需要,那么在将文档馈送给Solr之前,应该弄清楚Doctype值 - 例如,如果您的内容源为SQL,则应在SQL-Query中创建它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top