gpt4 book ai didi

ruby-on-rails - Rails sunspot-solr - 带连字符的单词

转载 作者:行者123 更新时间:2023-12-04 06:27:51 25 4
gpt4 key购买 nike

我正在使用 sunspot_rails gem,到目前为止一切正常,但是:我没有得到任何带有连字符的单词的搜索结果。

示例:字符串“tron”返回很多结果(所有文章中提到的词都是e-tron)

字符串“e-tron”返回 0 个结果,即使这是我所有文章中提到的正确单词。

我当前的 schema.xml 配置:

    <fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

我想要什么:搜索字符串 tron 的行为当然没问题,但我也希望搜索字符串 e-tron 有正确的匹配项。

最佳答案

问题是 solr.StandardTokenizerFactory 用连字符分割单词,因此“e-tron”生成标记“e”、“tron”。据推测,“e”作为 solr.TextField 过滤器丢失,最小标记大小为 2。

这是一个可以显示您的具体问题的示例。

<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
  1. solr.WhitespaceTokenizerFactory 将在空白处生成 token 。 ["e-tron"]
  2. solr.WordDelimiterFilterFactory 将在连字符处拆分,但也会保留原始单词。 ["e", "tron", "e-tron"]

关于ruby-on-rails - Rails sunspot-solr - 带连字符的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17225344/

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