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 次  |  
        
|   最近记录:  |