其实我想和' B T Patil'完全匹配。我创建了一个以下的字段类型
<fieldType name="text_name" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1" splitOnNumerics="1" splitOnCaseChange="1" catenateWords="1"
catenateNumbers="1" catenateAll="1" generateWordParts="1" generateNumberParts="1" stemEnglishPossessive="1" />
</analyzer>
</fieldType>
此外,我的文本字段和ngram文件也应用于字符串。因此,每当我在我的领域中输入B T Patil
查询时,它也会返回我无关的结果,即它返回我
b t Agrawal
Jaykumar B. Patil
BHASKAR B. PATIL
我希望它能归还b t patil or b.t.patil or b. t. patil
个结果。
是否需要更改标记器?
答案 0 :(得分:0)
你可以尝试这样的事情。创建一个完全匹配的字段类型,如下面的
<fieldType name="text_exact" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<dynamicField name="*_exact" stored="false" type="text_exact" multiValued="true" indexed="true"/>
比text和text_name字段提升此字段和短语字段。
searchable do
text :field1_exact, as: :field1_exact, default_boost: 5.0 do
field1
end
text :field1_name, as: :field1_name, default_boost: 3.0 do
field1
end
end
Sunspot.search(Model) do
fulltext 'B T Patil'do
fields (field1_exact, field1_name, field1)
phrase_fields (field1_exact: 8, field1_name: 4, field1: 2)
end
end
如果有的话,给ngram字段优先级最低。