2012-10-22 51 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