太阳黑子中以相同单词开头的数据 rails
Data starting with same words in sunspot rails
我的控制器是
@search = Sunspot.search(User) do
fulltext params[:search]
end
@search_products = @search.results
我希望它也匹配那些以搜索参数开头的名称
在您的 solr 模式文件中创建一个新类型 (solr/conf/schame.xml)。将此添加到 types 标签下的 schema.xml :
<fieldType class="solr.TextField" name="text_pre" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="10" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
这里minGramSize是最小字符数,maxGramSize是可以搜索的最大字符数。
例如,minGramSize=8 表示像 Kapil Kumar Yadav 这样的词可以用所有这些子字符串搜索 => "K"、"Ka"、"Kap", "Kapi", "Kapil", "Kapil ", "Kapil K", "Kapil Ku", 但不会用长度超过 8 个字符的搜索参数进行搜索,所以建议为 maxGramSize 保留一个适合所有已编入索引的字段的值。
现在在同一个 solr schama 文件中创建一个新的动态字段定义,将其添加到 fields 标签下的 schema.xml:
<dynamicField name="*_textp" stored="false" type="text_pre" multiValued="true" indexed="true"/>
最后配置 User class 中的所有文本字段以使用 as 选项索引到您新创建的动态字段,例如:
class User < ActiveRecord::Base
searchable do
text :name, as: :name_textp
text :address, as: :address_textp
# etc.
end
end
我的控制器是
@search = Sunspot.search(User) do
fulltext params[:search]
end
@search_products = @search.results
我希望它也匹配那些以搜索参数开头的名称
在您的 solr 模式文件中创建一个新类型 (solr/conf/schame.xml)。将此添加到 types 标签下的 schema.xml :
<fieldType class="solr.TextField" name="text_pre" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="10" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
这里minGramSize是最小字符数,maxGramSize是可以搜索的最大字符数。
例如,minGramSize=8 表示像 Kapil Kumar Yadav 这样的词可以用所有这些子字符串搜索 => "K"、"Ka"、"Kap", "Kapi", "Kapil", "Kapil ", "Kapil K", "Kapil Ku", 但不会用长度超过 8 个字符的搜索参数进行搜索,所以建议为 maxGramSize 保留一个适合所有已编入索引的字段的值。
现在在同一个 solr schama 文件中创建一个新的动态字段定义,将其添加到 fields 标签下的 schema.xml:
<dynamicField name="*_textp" stored="false" type="text_pre" multiValued="true" indexed="true"/>
最后配置 User class 中的所有文本字段以使用 as 选项索引到您新创建的动态字段,例如:
class User < ActiveRecord::Base
searchable do
text :name, as: :name_textp
text :address, as: :address_textp
# etc.
end
end