gpt4 book ai didi

ruby-on-rails - Solr/Sunspot - 在运行时确定索引语言,动态选择分析器

转载 作者:行者123 更新时间:2023-12-04 10:44:45 25 4
gpt4 key购买 nike

我想使用 Solr + Sunspot 来索引一个双语 FR-EN 站点。问题:模型 Post 可以用法语或英语编写。我可以在运行时确定什么是语言,但我也需要 Solr 相应地索引模型。

EG:对于法国模特,我需要一个法国词干分析器,

<filter class="solr.SnowballPorterFilterFactory" language="French"/>

我有哪些选择?我可以在运行时更改 Solr 分析器吗?我可以为每种语言制作一套分析器吗?

最佳答案

这是一个很好的问题,并且正在讨论要包含在 Sunspot 中的一项功能。

Sunspot 使用动态字段命名约定来设置其架构。例如,这里有两个现有的文本字段定义:

<dynamicField name="*_text" stored="false" type="text" multiValued="true" indexed="true"/>
<dynamicField name="*_texts" stored="true" type="text" multiValued="true" indexed="true"/>

这些对应于 fieldType name="text"之前在模式中定义。
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

您可以为要索引的不同语言添加类似的定义(正如 Mauricio 也提到的),然后设置一些新的 dynamicField定义来使用它们。

1. A fieldType法语文本字段的定义
<fieldType name="text_fr" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="French"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

2. A dynamicField法语文本字段的定义
<dynamicField name="*_text_fr" stored="false" type="text" multiValued="true" indexed="true"/>
<dynamicField name="*_texts_fr" stored="true" type="text" multiValued="true" indexed="true"/>

3. 在 Sunspot 中使用法语文本字段

最新的 Sunspot 1.2(尚未完全发布 — 使用 1.2.rc4)支持 :as选项可让您指定字段名称。
searchable do
text :description, :as => 'description_text_fr'
end

就像我说的,这是我想添加到 Sunspot 1.3 或 1.4 的东西。就个人而言,我希望看到类似 :lang => :en 的内容。在文本字段定义上选择适当的字段定义。请随时在 Sunspot 邮件列表中加入您的想法!

关于ruby-on-rails - Solr/Sunspot - 在运行时确定索引语言,动态选择分析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4508780/

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