4

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>

ありがとう。

4

1 に答える 1

1

特定の文字は、Lucene (Solr) で特別な機能を持っています。これを読んで、どれをどのようにエスケープするかを見つけてください。

于 2012-08-10T10:11:18.993 に答える