2017-03-26 5 views
0

저는 solr을 처음 사용하고 있습니다. 나는 "name"같은 데이터를 가지고 있습니다 : "John Lewis". 모양과 검색을 완벽하게 검색합니다. fq = name % 3A + % 22John + Lewis % 22 이것은 Solr 콘솔에서 구성되어 잘 작동합니다.공백이있는 Solr 쿼리 데이터를 쿼리해야합니다.

필자의 요구 사항은 Java 레이어에서 나오는 특정 단어를 "JohnLewis"으로 검색하는 것입니다. solr repo에서 "John Lewis"와 매핑되어야합니다.

이 검색은 이름 필드 (2 단어 및 중간에 공백)로만 제한되지 않습니다. "현금 보상 신용 카드"과 같은 다른 세부 정보가 있습니다.이 단어는 4 단어이며 사용자는 "CashRewardCreditCards"과 같은 검색어를 사용합니다.

solaris에서 사용할 수있는 파서로 schema.xml에서 처리 할 수 ​​있다면 누군가 나를 도울 수 있습니까?

+0

귀하의 데이터는 무엇입니까? JohnLewis를 독자적으로 찾고 있습니까 아니면 다른 텍스트에 포함되어 있습니까? 자체적으로 다음과 같은 Ashraful 솔루션이 작동해야합니다 (입력에서 공백을 제거하십시오). –

답변

1

사용자 정의 fieldType을 만들어야합니다.

첫째는 SOLR 스키마에 fieldType를 정의

<fieldType name="word_concate" class="solr.TextField" indexed="true" stored="false"> 
    <analyzer> 
     <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\s*" replacement=""/> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
    </analyzer> 
</fieldType> 

는 여기에서 우리는 word_concate로 fieldType을 지명했다.
우리는 CharFilterFactories의 solr.PatternReplaceCharFilterFactory

숯 필터 구성 요소가 사전 프로세스 입력 자 사용. Char 필터는 토큰 필터와 같이 연결될 수 있으며 Tokenizer 앞에 위치 할 수 있습니다. PatternReplaceCharFilterFactory 필터는 문자 패턴

를 교체하거나 변경하는 정규 표현식을 사용

패턴 :

<field name="cfname" type="word_concate"/> 

당신의 이름 필드를 복사합니다 \s* 유형으로 word_concate으로 필드를 만들 0 개 이상의 공백 문자

두 번째 의미 복사 필드가있는 cfname에

<copyField source="name" dest="cfname"/> 

세 번째로 데이터를 다시 색인화하십시오. 이제

당신이 조회 할 수 있습니다 cfname:"JohnLewis"이 이름 John Lewis

0

입력을 가정하면 내가 SOLR의 말씀 구분 기호 출발점으로하여 분석기의 쿼리 측의 splitOnCaseChange 매개 변수 필터 사용하는 것 같이 낙타 표기법입니다 반환합니다. 여기에는 CashRewardCreditCards 등의 입력 토큰을 가지고 토큰 현금 보상 신용 카드

를 생성하는 참조 : WordDelimiterFilterFactory

그것은 splitOnCaseChange 속성이 있습니다에서

https://cwiki.apache.org/confluence/display/solr/Filter+Descriptions#FilterDescriptions-WordDelimiterFilter

0

봐. 이 값을 1로 설정하면 JohnLewis는 John Lewis로 색인이 생성됩니다.

쿼리 분석기에 추가해야합니다. 사용자가 JohnLewis를 검색하면 John Lewis로 검색이 변환됩니다.