2012-10-22 49 views
1

我正在使用Apache Solr和Solarium客户端库for PHP。Apache Solr转义查询

问题是特殊字符,短划线(-)。

当我在搜索查询中有一个短划线时,我没有得到任何匹配。

我试图通过使用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" /> 

回答

3

的是,你需要逃避一些特殊字符。它们列here

您可以用反斜杠\逃避它们。我不是日光浴专家,但您使用的功能似乎需要做什么。可能还有另一个原因,为什么你没有得到预期的比赛。

+0

是的,我正在寻找它的原因和解决方案。谢谢。 – umpirsky

+0

我想你需要提供更多信息。提供的信息很难给你一个解决方案。如果您的查询正确转义,这一切取决于您的文档如何编入索引。 – javanna

+0

我没有做任何特别的事情。我按照原样对文档进行索引,而不会转义。如果文档字段包含短划线,我将它们编入索引(例如'foo-bar')。 – umpirsky