gpt4 book ai didi

Solr - 将分析器的结果写入不同的字段

转载 作者:行者123 更新时间:2023-12-01 22:44:36 25 4
gpt4 key购买 nike

我已经阅读了一些教程并浏览了 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”开头,则将字符串“Contribute”写入索引中的字段 docType。

上述文档应在索引中可用,并包含以下字段:

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

我的想法是为此使用分析器。 Analyzer 的结果将像往常一样写入索引中的“id”字段(只是原始文本的副本),但结果“Resolve”或“Contribute”应写入另一个字段。

我的基本问题是:如何在分析器(Java 片段)中实现这一点?为了使其更复杂,索引字段“docType”应该是可搜索的,并且必须在搜索结果中可用。字段 id 和 docType 的架构看起来如何?

提前致谢托拜厄斯

最佳答案

如果您只需要索引值,那么模式方法就足够了。创建一个执行必要处理的新字段类型,创建一个新类型的字段,并设置一个复制字段以从 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 查询中创建它,等等。

关于Solr - 将分析器的结果写入不同的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3966070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com