Apache solr を使用して音楽データベースを検索する Symfony 1.4 アプリケーションを構築しています。tjSolrDoctrineBehaviorPlugin を使用して、Apache solr を Symfony 1.4 / Doctrine 1.2 アプリに移植しています。私はApache solrを初めて使用しています。
私が得ている問題は、文字列「Katy Perry - Firework」を入力すると、「Katy Perry」の結果しか得られず、クエリのダッシュ「-」の後のすべてが無視されるように見えることです。「KatY Perry Firework」とだけ入力すると、検索が正しく機能し、正確な曲が検索されます。ダッシュが検索を台無しにする理由がわかりません。WordDelimiterFilterFactory は英数字以外の文字を破棄すると思いました。パラメータが間違っていますか?
トークナイザー/フィルターを使用してダッシュまたは「 - 」(スペース ダッシュ スペース) 文字列を無視するにはどうすればよいですか。ユーザーは検索バーでダッシュを使用してアーティスト (「 - 」) から曲を区別することが多いと確信しているためです。
これが私のschemal.xmlです:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<!-- <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> -->
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
ありがとう。