Solr의 비명을 멈추기 위해 Solr의 Totitlecase
-
19-09-2019 - |
문제
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/
// 존