0

我正在尝试提供文本搜索以根据城市的名称和所属国家/地区的名称来查找城市。

例如,我想返回Milan, Italy搜索条件mil ita,或者Los Angeles, United States搜索los ang uni.

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

class City < ActiveRecord::Base
  belongs_to :country

  searchable do
    text :name
    text :country do
      country.name
    end
  end
end

class Country < ActiveRecord::Base
end

这是我的 solrschema.xml文件的相关部分:

<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

这里发生的情况是,如果我搜索mil我会得到Milan, Italy结果,但搜索mil ita不会返回任何内容。

有任何想法吗?

先感谢您,

河。

4

1 回答 1

0

找到了解决方案,我想我会分享。

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

searchable do
  text :composite_name do
    "#{name} #{country.name}"
  end
end

这行得通。

河。

于 2013-02-15T14:03:39.807 回答