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 回答