문제

Solr의 측면을 사용하고 있으며 필터를 사용하여 돌아 다닐 수 있기를 바라는 문제가 발생했습니다.

기본적으로 때로는 마을 이름이

"케임브리지"

그리고 언젠가는 그대로 올 것입니다

"케임브리지"

나는 Solr에서 필터를 사용하여 Town Name의 비명 캡 버전을 중지하고 싶었습니다. 모든 텍스트를 만들 수있는 피더가있는 것 같습니다. 소문자.

<!-- A text field that only sorts out casing for faceting -->
    <fieldType name="text_facet" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

누군가가 단어의 첫 번째 문자를 무시하고 다른 문자들에게 소문자를 적용 할 필터를 알고 있는지 궁금했습니다. 예를 들어

  • 케임브리지 >> 케임브리지
  • 킹스턴 헐 >> 킹스턴 헐

또는 자신의 필터를 쉽게 작성하는 것이 쉬운 경우 .. 그렇게하는 방법에 대한 도움이 될 것입니다. 나는 Java 사람이 아닙니다 ..

감사

도움이 되었습니까?

해결책

Afaik 그런 내장 필터가 없습니다. 쓰고 싶다면 참조하십시오 소문자 연락 그리고 소문기 필터 참고로는 그리 어렵지 않은 것 같습니다.

또는이 클라이언트 측, 즉 Solrnet에서는 실제 쿼리 후 필요한 변환을 수행하는 분리기 데코레이터를 작성할 수 있습니다. totitlecase.

다른 팁

아마도 당신은 solr.patternreplacecharfilterfactory를 사용할 수 있습니까?

<fieldType name="textCharNorm" class="solr.TextField">
  <analyzer>
    <filter class="solr.LowerCaseFilterFactory"/>
    <charFilter class="solr.PatternReplaceCharFilterFactory"
                pattern="([^\s]{1})([^\s]*)" replaceWith="\U$1\L$2"/>
  </analyzer>
</fieldType>

코드 또는 solr.patternreplacecharfilterfactory를 테스트하지 않았으므로 그것이 작동하는지 확실하지 않습니다. 자신의 필터를 작성 해야하는 경우이 안내서가 유용 할 수 있습니다.

http://robotlibrarian.billdueber.com/building-a-solr-text-filter-for-normalizing-data/

// 존

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top