我正在尝试根据他们的姓名和所属国家的名称提供文字搜索来查找城市。
例如,我想返回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
这是我的solr schema.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
将不会返回任何内容。
有什么想法吗?
提前谢谢你,
河
答案 0 :(得分:0)
找到了一个解决方案,我以为我会分享。
您只需要构建一个“自定义字段”,其中包含您要启用搜索的所有文本,例如(在City模型中):
searchable do
text :composite_name do
"#{name} #{country.name}"
end
end
这很有效。
河