2012-07-11 7 views
4

나는 태양 흑점/dismax와 함께 Solr를 사용하고 있습니다. 알파벳이 아닌 문자를 쿼리 할 수 ​​있습니까? 즉 :태양 흑점/솔라 : 알파벳이 아닌 문자

~ ! @ # $ %^& * () _ + - = [ ] { } | \

가 dismax 포함/제외 사업자이기 때문에 내가 +/- 탈출해야한다고 알고 있어요.

Foo.search { fulltext '=' }.results.length # => 0 
Foo.search { fulltext '\=' }.results.length # => 0 

그러나 :

<fieldType name="text" class="solr.TextField" omitNorms="false"> 
     <analyzer> 
      <tokenizer class="solr.StandardTokenizerFactory"/> 
      <filter class="solr.StandardFilterFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 
+1

어떤 토크 나이저를 사용하십니까? 구두점 문자를 삭제하지 않았습니까? –

+0

"text"에서 사용중인 tokenizers로 내 질문을 업데이트했습니다. –

답변

3

SOLR의 : 여기

Foo.search { fulltext 'a'}.results.length # => 30 

내가 사용하고 토크 나이에 설정되어 나는 이러한 문자를 검색 할 때 나는 어떤 일치를 받고 없습니다 해요 StandardTokenizer은 모든 '특수 문자'를 삭제합니다. 일반 텍스트와 함께 사용하도록 최적화되어 있기 때문입니다. 따라서 예를 들어 '='은 색인 생성 중에 텍스트에서 제거 되었기 때문에 '='을 찾을 수 없습니다.

모든 문자를 보존하는 토큰 화기 중 하나는 WhitespaceTokenizer이며 공백에서만 입력을 분리합니다. 다음과 같은 토큰을 생성하므로 문제의 좋은 해결책인지 평가해야합니다.

20 세 여우가 게으른 개로 점프합니다. - '20 살 ','여우 ','뛰어 오르는 ','끝난 ','그 ','게으른 ','개 '등이 있습니다. 당신이 당신의 자신의 토크 나이를 제공해야한다는 발생할 수 있습니다

(하나를 구현하여 필요하지, 당신은 분할 문자를 적절한 정규 표현식을 정의하고 PatternTokenizer 사용) 또는 WordDelimiterFilter 또는 PatternReplaceFilter 같은 필터를 사용합니다.

관련 문제