2016-10-01 6 views
0

는 내가 달성하고자하는 것입니다. 어떻게해야합니까? SOLR 대소 문자를 구분 필드 검색 문제

내가 여기 test_field

<fieldType name="textgen" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="select"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

에 할당 된 내의 schema.xml이 textgen 유형이 것은 내 쿼리를받을 원하는 결과입니다. 이 필터 LowerCaseFilterFactory

http://localhost:8983/solr/test-data/select?q=test_field:*test*&wt=json&indent=true

및 빈 결과에도 불구하고

{ 
    "responseHeader":{ 
    "status":0, 
    "QTime":2, 
    "params":{ 
     "q":"test_field:*", 
     "indent":"true", 
     "wt":"json"}}, 
    "response":{"numFound":5,"start":0,"docs":[ 
     { 
     "id":"change.me", 
     "test_field":["test"], 
     "_version_":1546932094148542464}, 
     { 
     "id":"change.me1", 
     "test_field":["tesT"], 
     "_version_":0203020288}, 
     { 
     "id":"change.me2", 
     "test_field":["TesT"], 
     "_version_":3122255872}, 
     { 
     "id":"change.me3", 
     "test_field":["TEsT"], 
     "_version_":7768496128}, 
     { 
     "id":"change.me4", 
     "test_field":["TEST"], 
     "_version_":1546932111283322880}] 
    }} 

나는 그것이 대소 문자를 구분하기 때문에 어떤 결과를 제공하지 않습니다이 쿼리를 사용

. (내가 뭘 잘못하고있는거야?)

{ 
    "responseHeader":{ 
    "status":0, 
    "QTime":2, 
    "params":{ 
     "q":"test_field:*test*", 
     "indent":"true", 
     "wt":"json"}}, 
    "response":{"numFound":1,"start":0,"docs":[ 
     { 
     "id":"change.me", 
     "test_field":["test"], 
     "_version_":1546932094148542464}] 
    }} 
+0

필터를 추가 한 후 문서의 색인을 다시 만들어야합니다. 따라서 문서의 색인을 다시 작성한 후 쿼리를 확인하십시오. –

+0

새로운 스키마를 만들었고 효과가있었습니다. 이전의 솔라 스키마에서 뭔가가 엉망이라고 생각합니다. –

답변

0

실제로 검색 용어의 양쪽 끝에 별표 (와일드 카드)를 넣고 있습니까? 그렇게하지 않아도됩니다. Solr 구성의 요점은 와일드 카드없이 단어를 검색 할 수있는 방법으로 텍스트를 토큰 화하는 것입니다.

당신은 당신의 텍스트 작업을 검색 할 경우, 혼합의 경우 매칭을 포함하여 작동합니다. 그렇지 않으면 필드가 실제로 올바른 유형으로 매핑되고 다시 색인화되었는지 확인하십시오. 여전히 혼란 스럽다면 Solr Admin UI에는 필드 (또는 필드 유형)를 선택하고 무언가가 토큰 화되고 일치하는 방식을 볼 수있는 분석 화면이 있습니다. 거기에서 실험해볼 수 있습니다.

+0

새로운 스키마를 만들었고 작동했습니다. 이전 솔라 스키마에서 뭔가 잘못되었다고 생각합니다. –