2013-05-08 4 views
0

SOLR 데이터베이스를 사용하는 PHP 애플리케이션이 있습니다. 문제는 내가/용어 요청을하고있는 중이 야 때 나타났다 (terms doc)/용어로 검색하는 Solr

그래서 관심 문서의 부분은 우리가

poi: "Bistriţa", 
... 
text: [ 
"ddt", 
"Numeric", 
"/14/Gagaga 2/11/Economics/17/datenow", 
"/20/Daniel_same/11/Economics/17/datenow", 
"0/Gagaga 2", 
"1/Gagaga 2/Economics", 
"2/Gagaga 2/Economics/datenow", 
"0/Daniel_same", 
"1/Daniel_same/Economics", 
"2/Daniel_same/Economics/datenow", 
"ppla", 
"seat of a first-order administrative division", 
"/19/Daniel_same/1071/Plurinational State of Bolivia/2269/Cuba/2272/Bistriţa", 
"0/Daniel_same", 
"1/Daniel_same/Plurinational State of Bolivia", 
"2/Daniel_same/Plurinational State of Bolivia/Cuba", 
"3/Daniel_same/Plurinational State of Bolivia/Cuba/Bistriţa", 
"0/Undefined_activity", 
"Year", 
"0/1999", 
"0/1999", 
"Measured", 
"", 
"utf8" 
], 

하고 요청 응답은

http://localhost:8080/solr/terms 
?wt=json 
&indent=true 
&terms.sort=count 
&terms.mincount=1 
&terms.limit=10 
&terms.regex.flag=case_insensitive 
&terms.regex=.*bi.* 
&terms.fl=text 

입니다

{ 
    responseHeader: { 
     status: 0, 
     QTime: 4 
    }, 
    terms: { 
     text: [ 
      "bistriå", 
      16 
     ] 
    } 
} 

결과에 따른 문제점은 결과 텍스트가 잘립니다. 나는 도시의 UTF-8 인코딩 인 "BistriÅ £ a"를 기대했다. Bistrița. 그러나 결과는 특수 문자에서 잘린 것처럼 보입니다.

이상한 것은

내가 필드 이름 대신 "텍스트"의 "POI"을 요청을 할 경우, 내가 올바른 응답

http://localhost:8080/solr/terms 
?wt=json 
&indent=true 
&terms.sort=count 
&terms.mincount=1 
&terms.limit=10 
&terms.regex.flag=case_insensitive 
&terms.regex=.*bi.* 
&terms.fl=poi 

{ 
    responseHeader: { 
     status: 0, 
     QTime: 4 
    }, 
    terms: { 
     text: [ 
      "Bistriţa", 
      16 
     ] 
    } 
} 

그래서 단어가 잘리지 않습니다를 얻을 수있다.

두 필드의 가장 큰 차이는 유형입니다. 포이문자열 유형 및 텍스트텍스트 _ 일반 숫자 유형이 있습니다. text_general 유형은 다음과 같은 스키마에 정의되어 있습니다.

<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" /> 
    <!-- in this example, we will only use synonyms at query time 
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
    --> 
    <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> 

질문하는 경우 자세한 내용을 제공 할 수 있습니다. 내가 지금 무엇을 추가 할 수 있는지 모르거나 질문을 너무 많이 부풀려서는 안된다.

답변

0

text_general 필드에 AsciiFoldingFilterFactory을 사용하여 특수 문자를 적절히 처리하는 것이 좋습니다. 또한 Solr에서 제공하는 Language Analysis 지원을 참조하면 유용 할 수 있습니다.

관련 문제