2012-05-17 164 views
3

因此,我在我的rails項目中使用了太陽黑子,並且正在爲歌曲名稱編制索引。 當我搜索某個特定術語(例如「迷失自己」)時,我想要做的是在我的結果列表頂部顯示包含查詢完全匹配的記錄(帶空格和所有)。Sunspot SOLR KeywordTokenizer - 搜索將不會返回正確的結果

要做到這一點,我決定來定義使用KeywordTokenizerFactory這樣的schema.xmlfieldType(我正打算與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,搜索查詢將不會返回任何結果。

因此,首先,我會問,如果我的方法是正確的,爲什麼不用關鍵字標記工具正確地工作搜索領域?

+0

什麼ÿ我們的搜索查詢使用類似於 - 您也需要使用類似的分析器 –

+0

如果您問我是否使用相同的分析器進行查詢和索引,答案是肯定的(如果您查看字段類型配置,會發現我沒有將查詢和索引分析器分開,所以它們都使用相同的東西) –

+0

如果在搜索之前用引號括住該術語,但是使用常規文本字段,該怎麼辦?如果你還需要非確切的匹配,你可以做2次搜索... – brutuscat

回答

1

之所以搜索「迷失自己」只是不提供的結果是,通過KeywordTokenizerFactory生成的令牌「輸youself」,而是由太陽黑子使用的queryParse分裂您查詢到兩個記號「輸」和「你自己」

解決方案

所以你應該通過添加雙引號來搜索是搜索整個短語「\」迷失了自己\「」