使用 Rails Solr 搜索子字符串
Search substring with Rails Solr
我使用 gem sunspot_solr 进行全文搜索,但我需要搜索子字符串,例如:"teststring",我需要搜索此键入 'est','tr', 'ing'...
我需要为此做什么?
请在下面找到使用 sunspot
进行子字符串搜索的详细信息
执行 prefix/substring 匹配的最佳方法是使用 NGramFilter (substring) or EdgeNGramFilter (prefix) filters in Solr
首先,向您的模式添加一个新类型:
<fieldType class="solr.TextField" name="text_pre" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
然后
也将此添加到您的 schema.xml:
<dynamicField name="*_textp" stored="false" type="text_pre" multiValued="true" indexed="true"/>
最近
searchable do
text :code, :as => :code_textp
# etc.
end
更多参考:
https://github.com/sunspot/sunspot/wiki/Matching-substrings-in-fulltext-search
https://github.com/sunspot/sunspot/wiki/Wildcard-searching-with-ngrams
Add this code inside
rails_dir/solr/conf/schema.xml
Under text/string field type.
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
.
.
.
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="20" side="front"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="20" side="back"/>
</analyzer>
我使用 gem sunspot_solr 进行全文搜索,但我需要搜索子字符串,例如:"teststring",我需要搜索此键入 'est','tr', 'ing'...
我需要为此做什么?
请在下面找到使用 sunspot
执行 prefix/substring 匹配的最佳方法是使用 NGramFilter (substring) or EdgeNGramFilter (prefix) filters in Solr
首先,向您的模式添加一个新类型:
<fieldType class="solr.TextField" name="text_pre" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
然后
也将此添加到您的 schema.xml:
<dynamicField name="*_textp" stored="false" type="text_pre" multiValued="true" indexed="true"/>
最近
searchable do
text :code, :as => :code_textp
# etc.
end
更多参考:
https://github.com/sunspot/sunspot/wiki/Matching-substrings-in-fulltext-search
https://github.com/sunspot/sunspot/wiki/Wildcard-searching-with-ngrams
Add this code inside
rails_dir/solr/conf/schema.xml
Under text/string field type.
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
.
.
.
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="20" side="front"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="20" side="back"/>
</analyzer>