Evo*_*o_x 3 ruby-on-rails n-gram sunspot-solr
我正在使用sunspot_rails宝石,到目前为止一切都很完美但是:我没有得到任何带连字符的搜索结果.
示例:字符串"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>
Run Code Online (Sandbox Code Playgroud)
我想要的:搜索字符串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>
Run Code Online (Sandbox Code Playgroud)
solr.WhitespaceTokenizerFactory 将在空白处生成令牌. ["e-tron"]solr.WordDelimiterFilterFactory 将分裂连字符,但也保留原始单词. ["e", "tron", "e-tron"]| 归档时间: |
|
| 查看次数: |
1073 次 |
| 最近记录: |