2

我正在使用 Apache Solr 和用于 PHP 的Solarium客户端库。

问题是特殊字符,破折号(-)。

当我的搜索查询中有破折号时,我没有得到任何匹配项。

我试图通过使用来解决这个问题Solarium_Query_Helper::escapeTerm()。但我再也没有得到任何匹配。破折号用反斜杠转义\

这个问题的解决方案是什么?

我正在考虑在索引时转义所有字段,但这听起来不是一个好主意。

这是我的部分schema.xml

 <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>
...
<fields>
...
  <field name="myfield" type="text_general" indexed="true" stored="true" />
</fields>
...
<defaultSearchField>text</defaultSearchField>
<copyField source="myfield" dest="text" />
4

1 回答 1

4

这些是您需要转义的一些特殊字符。它们在这里列出:

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \

You can escape them using the backslash \. I'm not a Solarium expert but the function you're using seems to do what needs to be done. Probably there is another reason why you don't get the expected matches back.

于 2012-10-22T10:27:00.383 回答