需要忽略来自apache solr查询搜索的破折号(“ - ”)

时间:2012-08-09 21:47:38

标签: apache symfony1 solr search-engine

我正在使用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会丢弃非字母数字字符。我的参数错了吗?

我如何使用tokenizer / filters来忽略破折号或“ - ”(空格破折号空间)字符串,因为我非常确定用户会在搜索栏中大量使用破折号来描绘艺术家的歌曲(“ - ” )。

这是我的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>

感谢。

1 个答案:

答案 0 :(得分:1)

某些字符在Lucene(Solr)中具有特殊功能。 Read this找出哪些以及如何逃避它们。