そのため、Railsプロジェクトでsunspotを使用しており、曲名のインデックスを作成しています。私がやりたいのは、特定の用語(たとえば、「自分を失う」)を検索して、結果リストの上部に、クエリに完全に一致するレコード(スペースとすべてを含む)を表示することです。
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
それで、まず最初に、これに対する私のアプローチが正しいかどうか、そしてなぜキーワードトークナイザーを使用したフィールドの検索が正しく機能しないのかを尋ねます。