2012-08-23 2 views
1
아니 결과를 반환하지

내 코드는 다음과 같습니다 :SolrQuery 미만 3 자

SolrQuery query = new SolrQuery(); 
    query.setQuery(q.trim()); 
try { 
     QueryResponse res = getSolrServer().query(query); 
     return res.getResults(); 
    } catch (SolrServerException sse) { 
     log.error(sse); 
    } 

문제는 내가 쿼리 더 많은 다음 세 문자가있는 경우이 나에게 응답, 예를 반환한다는 것입니다 쿼리 문자열 "che"는 결과로 응답하지만 쿼리 문자열 "ch"는 응답이 없습니다. Solr Query의 3 문자 길이를 재정의 할 수있는 방법이 있습니까? 네, 프로그래밍 사전에 도움을 주셔서 감사합니다 자바

<analyzer type="index"> 
    <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="50" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 

를 사용하여 대체 할 수있는 경우

는 문제를 일으키는 아래의 XML입니다.

감사와 안부,

하기 Vaibhav

+0

Solr은 색인 생성 대상과 일치합니다. 아마 너는 ch를 위해서가 아니라 ch를 위해 어울릴거야. 인덱싱 대상, 인덱싱 방법에 대한 통찰력을 제공 할 수 있습니까? – Jayendra

+0

che는 문제가되는 것입니다. 3 문자 이상 검색 할 수 있지만 3 문자 미만의 문자열은 결과에 응답하지 않습니다. – vaibhav

+2

필드의 구성은 무엇입니까? 분석기 체인에서 LengthFilter를 사용하지 않는 한 그러한 구성이 없기 때문입니다. – Jayendra

답변

3

NGramTokenizerFactory : -
기본 동작. 이 토크 나이저는 전체 필드에서 작동합니다. 그것은 공백에서 필드를 깨지 않습니다. 결과적으로 공백 문자가 인코딩에 포함됩니다. "이봐"

아웃 :에서는

<analyzer> 
    <tokenizer class="solr.NGramTokenizerFactory"/> 
</analyzer> 

"H", "E", "Y", "", "m", "A", "N", "고", "어이", "Y", "M", "엄마", "에"당신의 구성에 따라서

: - minGramSize = "3"maxGramSize = "50"미만 3가 필터링 될 항목

두 단어로 된 단어의 경우 색인에있는 용어가 없으므로 절대로 검색 할 수 없습니다. 검색 할 수있게하려면 minGramSize를 2로 변경해야합니다.

+0

하지만이 질문에 게시 된 자바 코드에서 재정의 될 수 있습니까? – vaibhav

+1

아니요 색인에 검색어가 없으므로 절대로 검색 할 수 없습니다. 검색 할 수있게하려면 minGramSize를 2로 변경해야합니다. – Jayendra

+0

우리는 언어에 따라 분석기를 전환 할 수 있습니다. 실제로 중국어와 일본어 같은 언어로 단일 문자를 기반으로 검색을 제공하고자합니다. – vaibhav