所以我在我的 Rails 项目中使用了太阳黑子,并且我正在索引歌曲名称。我想要做的是当我搜索特定术语(例如“迷失自我”)时,在我的结果列表顶部显示包含查询完全匹配的记录(带有空格和所有内容)。
为此,我决定像这样fieldType
在schema.xml
using中定义一个新的KeywordTokenizerFactory
(我打算将它与带有 的普通文本字段一起使用StandardTokenizer
,同时使用这两个并提升使用该字段得出的结果KeywordTokenized
):
<fieldType name="text_exact" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.TrimFilterFactory"/>
</analyzer>
</fieldType>
并添加这样的动态字段(不确定是否应该为此目的多值,也许有人也可以启发我):
<dynamicField name="*_exact" stored="false" type="text_exact" multiValued="true" indexed="true"/>
现在,在我的song.rb
文件中,我在searchable
配置中有这个:
text :song_name do
self.name
end
text :song_name_exact, as: :song_name_exact do
self.name
end
问题是,当我尝试使用该song_name_exact
字段进行搜索时,如果我的查询包含空格,则不会得到任何结果(因此,如果我有一首歌曲被调用foo
并且我搜索foo
它会找到它,但如果我有一个歌曲被调用foo bar
并搜索foo bar
,则搜索查询不返回任何结果。
所以首先,我会问我的方法是否正确,为什么使用关键字标记器在字段上的搜索不能正常工作?