因此,我在我的rails項目中使用了太陽黑子,並且正在爲歌曲名稱編制索引。 當我搜索某個特定術語(例如「迷失自己」)時,我想要做的是,在我的結果列表頂部顯示包含查詢完全匹配的記錄(帶空格和所有)。Sunspot SOLR KeywordTokenizer - 搜索將不會返回正確的結果
要做到這一點,我決定來定義使用KeywordTokenizerFactory
這樣的schema.xml
新fieldType
(我正打算與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
,搜索查詢將不會返回任何結果。
因此,首先,我會問,如果我的方法是正確的,爲什麼不用關鍵字標記工具正確地工作搜索領域?
什麼ÿ我們的搜索查詢使用類似於 - 您也需要使用類似的分析器 –
如果您問我是否使用相同的分析器進行查詢和索引,答案是肯定的(如果您查看字段類型配置,會發現我沒有將查詢和索引分析器分開,所以它們都使用相同的東西) –
如果在搜索之前用引號括住該術語,但是使用常規文本字段,該怎麼辦?如果你還需要非確切的匹配,你可以做2次搜索... – brutuscat