我正在使用 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>
谢谢。