문제

다음 필드 유형을 사용하여 SOLR을 쿼리하는 문제가 있습니다.

<fieldType name="text_ci" class="solr.TextField" positionIncrementGap="100">
   <analyzer>
      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
       <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
   </analyzer>
</fieldType>
.

인덱싱 및 쿼리 할 때 "snowballporterfilterfactory"를 적용 할 수 있습니다. 내가

와 같은 것을 인덱싱하면

마우스 물건과 재미

다음과 같이 생성됩니다.

"SnowballPorterFilterFactory"가 "마우스"라는 단어가 "Mous"로 바뀝니다. 우리가 원하는 것인가. 그러나

를 검색 할 때

마우스 *

같은 방식으로 "snowballporterfilterfactory"를 적용하는 것 같습니다. 나는 끝에서 * 때문입니다.

내 질문은 .. "snowballporterfilterfactory"가 와일드 카드에 대해 알고있는 방법이 있습니까? 그래서

쿼리 할 때

마우스 *

나는 0 결과를 얻지 못한다.

@

에 대해 쿼리하는 경우

mous *

레코드가 다시 돌아옵니다.

또는이 유형의 필드를 쿼리 / 색인 할 수있는 더 나은 방법을 제공 할 수 있습니까?

감사합니다 Dave

도움이 되었습니까?

해결책

FAQ :

다른 유형의 Lucene 쿼리와 달리, 와일드 카드, 접두사 및 퍼지 쿼리는 분석기를 통과하지 못하고 형태소 및 소지선과 같은 작업을 수행하는 구성 요소입니다. 분석기를 건너 뛰는 이유는 "개 *"를 찾고 있다면 "개"가 "개"를 처음으로 줄지지 않으려면 "개 *"가 의도 한 쿼리가 아닌 "개 *"가 일치하지 않습니다. 이러한 쿼리는 어쨌든 QueryParser가 소문자로 만듭니다. 이 동작은 setLowerCaseExpandedTerms (boolean) 메소드를 사용하여 변경할 수 있습니다

SOLR 소스를 변경하면 Solr-757 유용 할 수있는 패치가 붙어 있습니다. 나는 이걸로 소스로 다이빙 이외의 다른 방법을 모른다.

더 간단한 아이디어 일 수 있습니다 : 줄넘지 않은 복사 필드가 있습니다. 사용자는이 두 필드를 모두 검색 한 다음 마우스 *가 비 스템 필드에서 일치합니다.

(편집 : 실제로, 그 패치를 보면, 나는 그것이 원하는 것을 할 것인지 확신하지 못합니다. 기본적으로 쿼리 핸들러를 먼저 변경해야합니다.)

다른 팁

마지막으로 WILDCARDS를 사용하면 쿼리 분석기가 사용되지 않습니다.따라서 lowercasefilterfactory를 사용하고 있기 때문에 용어는 소문자로 인덱싱되고 mous *를 검색합니다. * 아무 것도 반환하지 않습니다.

와일드 카드를 사용하는 경우 유일한 것은 조건이 인덱싱되는 방식에 쿼리를 적응시키는 것입니다 (쿼리 분석기가 수행하는 것과 유사한 방식으로).

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