你如何启用与"太阳黑子铁路"部分匹配?

MKK*_*MKK 5 ruby-on-rails sunspot-rails

我刚刚设置了sunspot_rails,除了一件事情似乎运作良好.之后我做了3条记录如下

  1. 名称=约翰
  2. 名称= John2
  3. 名称= John3

当我使用关键字"John"搜索时,只显示第一条记录.它看起来像完全匹配.我希望所有这些都作为搜索结果出现.

这应该是默认发生的吗?还是我设置错了?

hyp*_*jas 8

如果您想在全文搜索中返回子字符串,可以查看

https://github.com/sunspot/sunspot/wiki/Matching-substrings-in-fulltext-search

您还可以sunspot_solr.rb在myapp/config/initializers /中添加用于分页结果的文件:

Sunspot.config.pagination.default_per_page = 100
Run Code Online (Sandbox Code Playgroud)

在这种情况下返回100结果.

添加:

您的schema.xml文件是以yourappfolder/solr/conf

您还可以添加<filter class="solr.NGramFilterFactory"/>以匹配任意子串.

这是我对schema.xml的特殊配置:

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>
<fieldtype class="solr.TextField" name="text_pre" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="10"/>
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.TrimFilterFactory" />
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.TrimFilterFactory" />
  </analyzer>
</fieldtype>
Run Code Online (Sandbox Code Playgroud)

对我来说,它适用于所有关键字的完整字符串和子字符串.请不要忘记重新启动服务器并重新索引模型以使更改生效.

问候!


MKK*_*MKK 0

谢谢!!!

阻止女孩控制器(girls_controller.rb)

def index

  @search = Girl.search do  
    fulltext params[:search]  
  end  
  @girls = @search.results 

#    @girls = Girl.all
#
#    respond_to do |format|
#      format.html # index.html.erb
#      format.json { render json: @girls }
#    end
end
Run Code Online (Sandbox Code Playgroud)

来自女孩模型的块(girl.rb)

searchable do 
  text :name_en, :name_es, name_ja
end
Run Code Online (Sandbox Code Playgroud)