模糊的;以“开始”;用Solr和Sunspot搜索多个单词

模糊的;以“开始”;用Solr和Sunspot搜索多个单词,solr,ruby-on-rails-3.2,sunspot-solr,Solr,Ruby On Rails 3.2,Sunspot Solr,我试图提供一个文本搜索,根据城市的名称和所在国家的名称来查找城市 例如,我想返回意大利米兰mil ita搜索,或者返回美国洛杉矶losang uni搜索 这些是我目前拥有的模型(验证省略): 我正在控制器中执行搜索,其中包含: search = City.search do fulltext params[:q] paginate page: 1, per_page: 10 end 这里发生的事情是,如果我搜索mil,我将得到Milan,Italy,但是搜索mil-ita将不会返回任何

我试图提供一个文本搜索,根据城市的名称和所在国家的名称来查找城市

例如,我想返回意大利米兰
mil ita
搜索,或者返回美国洛杉矶
losang uni
搜索

这些是我目前拥有的模型(验证省略):

我正在控制器中执行搜索,其中包含:

search = City.search do
  fulltext params[:q]
  paginate page: 1, per_page: 10
end
这里发生的事情是,如果我搜索
mil
,我将得到
Milan,Italy
,但是搜索
mil-ita
将不会返回任何结果

有什么想法吗

提前谢谢大家,


r、 找到了一个解决方案,我想与大家分享

您只需构建一个“自定义字段”,其中包含要启用搜索的所有文本,如下所示(在城市模型中):

这很有效

r

class Country < ActiveRecord::Base
end
<fieldtype class="solr.TextField" positionIncrementGap="100" name="text">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <!--<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>-->
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.TrimFilterFactory" />
    <filter class="solr.EdgeNGramFilterFactory"
            minGramSize="3"
            maxGramSize="30"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <!--<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>-->
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.TrimFilterFactory" />
  </analyzer>
</fieldtype>
search = City.search do
  fulltext params[:q]
  paginate page: 1, per_page: 10
end
searchable do
  text :composite_name do
    "#{name} #{country.name}"
  end
end