2012-10-22 5 views
1

PHP 용 Solarium 클라이언트 라이브러리가있는 Apache Solr을 사용하고 있습니다.Apache Solr Escape Query

문제는 특수 문자 인 대시 (-)입니다.

내 검색어에 대시가있을 때 일치하는 항목이 없습니다.

Solarium_Query_Helper::escapeTerm()을 사용하여이 문제를 해결하려고했습니다. 하지만 나는 다시 성냥을 얻지 못한다. 대시는 백 슬래시 \으로 이스케이프 처리됩니다.

이 문제의 해결 방법은 무엇입니까?

색인을 생성 할 때 모든 필드를 이스케이프 처리 할 생각 이었지만 좋은 아이디어는 아닙니다.

<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

를 이용해서 탈출해야하는 일부 특수 문자는 다음과 같습니다

schema.xml의 일부입니다. 그들은 here 나열되어 있습니다 :

당신은 백 슬래시 \을 사용하여 탈출 할 수 있습니다. 솔라 리움 전문가가 아니지만 사용하고있는 기능이 수행해야 할 작업을 수행하는 것처럼 보입니다. 아마도 예상되는 경기를 다시 얻지 못하는 또 다른 이유가있을 것입니다.

+0

예, 그 이유와 해결책을 찾고 있습니다. 감사. – umpirsky

+0

그러면 더 많은 정보를 제공해야 할 것 같습니다. 제공된 정보를 사용하면 솔루션을 제공하기가 어렵습니다. 쿼리가 올바르게 이스케이프 된 경우 문서가 인덱싱되는 방식에 따라 쿼리가 모두 달라집니다. – javanna

+0

나는 특별한 일을하지 않았다. 탈출하지 않고 문서를 그대로 색인화했습니다. 문서 입력란에 대시가 포함되어있는 경우 해당 입력란을 그대로 색인화했습니다 (예 :'foo-bar'). – umpirsky