所以我在我的rails项目中使用太阳黑子,而且我正在为歌曲名称编制索引。 当我搜索特定字词时(例如“迷失自己”),我想要做的是,在结果列表的顶部显示以显示包含完全匹配的记录查询(包含空格和所有内容)。
要做到这一点,我决定使用fieldType
在schema.xml
中定义一个新的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
并搜索{{1}},则搜索查询不会返回任何结果。
首先,我会问我对此的处理方法是否正确,为什么搜索关键字tokenizer工作正常?
答案 0 :(得分:1)
搜索“迷失自己”的原因只是没有提供结果是 KeywordTokenizerFactory 生成的令牌“失去了自己”,但是太阳黑子使用的queryParse会将您的查询拆分为两个令牌“失去”和“自己”
<强>解决方案强>
所以你应该通过在搜索中添加双引号来搜索整个短语“\”迷失自己\“”