2017-11-13 4 views
0

일치하는 부분 접두사 단어를 검색 할 SOLR을 구성하는 방법 :예를 들어

가 일치해야 %의 포인트를

  1. 은 퍼센트 포인트
  2. 는 내국인
  3. 센터는 지적

"point cent"와 일치 할 필요는 없습니다.

나는 solr6.0에서 NGramFilterFactory를 사용하려고 시도하지만, 항상 일치 순서가 뒤바뀐 결과를 얻는다. 이 같은 : 만 문자열로 일치

<analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="25"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 

나는 * 공간을 대체 할 PatternReplaceFilterFactory를 사용하려고 나누었다 그것은 작동하지 않았다입니다. KeywordTokenizer이 유지 때문에

field:cent* 

: 쿼리 와일드 카드를 사용하여 다음 ..

<analyzer> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 

과 : 당신은 단지 접두사를 일치시킬 때문에

+0

? 찾고있는 필드에서 solr.ReversedWildcardFilterFactory를 사용하도록 설정 한 다음 EdgeNgramFilterFactory가있는 것 같습니다. – sdwaraki

+0

ReversedWildcardFilterFactory를 사용하지 않았습니다. 난 StandardTokenizerFactory 각 단어와 일치하는 것 같아 order.But 상관 없어 처리하는 방법을 모르겠다 –

답변

0

, 당신은 NGramFilter 사용하지 않고 당신이 원하는 것을 얻을 수 있습니다 입력을 하나의 큰 토큰으로 사용하고 소문자 필터는 와일드 카드 검색을 수행 할 때 소문자 필터가 작동하므로 각 값 (ngramfilter의 기능)에 대해 많은 수의 토큰을 색인화하지 않아도됩니다. 값의 접두사 만주의하십시오.

정확하게 일치하는 항목을 더 높게 설정하는 두 번째 요구 사항의 경우 ngram 필터없이 공백 필드 정의를 쿼리하십시오. 공백 토큰 화 도구와 소문자 필터 만 있습니다. 접두사 쿼리를 반환 된 문서의 쿼리로 사용하고 다른 필드를 부스트 쿼리로 사용할 수 있습니다.

# 2와 # 3의 차이에 따라 규칙에 따라 원하는 검색어를 얻을 수 있습니다.

+0

나는 qf에서 여러 필드를 사용하므로 검색 문자열을 변경할 수 없습니다. PatternReplaceFilterFactory를 사용하여 공간을 *로 바꿉니다. 그러나 작동하지 않아 문자열로만 일치시킵니다. –

0

1) 퍼센트 포인트

2) 내국인

3) 센터는

가, 난 그냥 구문 쿼리 및 에지를 사용하는 것이 좋습니다 1과 3을 해결하고 중요한로 위치를 유지하기 위해 포인트 N- 그램 인덱스 시간 분석 :

  • 검색 : "%의 포인트"
당신이 SOLR은이 두 단어로 구성되어 모르는 인덱스의 화합물 토큰을 가지고있는 점 2의는

<fieldType name="text_autocomplete" class="solr.TextField"> 
 
      <analyzer type="index"> 
 
       <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/> 
 
       <tokenizer class="solr.StandardTokenizerFactory"/> 
 
       <filter class="solr.WordDelimiterFilterFactory" 
 
         generateWordParts="1" generateNumberParts="1" catenateWords="0" 
 
         catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> 
 
       <filter class="solr.LowerCaseFilterFactory"/> 
 
       <filter class="solr.EdgeNGramFilterFactory" maxGramSize="20" minGramSize="2"/> 
 
      </analyzer> 
 
      <analyzer type="query"> 
 
       <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/> 
 
       <tokenizer class="solr.StandardTokenizerFactory"/> 
 
       <filter class="solr.WordDelimiterFilterFactory" 
 
         generateWordParts="1" generateNumberParts="1" catenateWords="0" 
 
         catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> 
 
       <filter class="solr.LowerCaseFilterFactory"/> 
 
      </analyzer> 
 
     </fieldType>
가 더 어렵습니다.그것은 도움이 될 수

이 맞춤법 검사기 [1]을 살펴 수

[1] https://lucene.apache.org/solr/guide/6_6/spell-checking.html#SpellChecking-WordBreakSolrSpellChecker 같은 스키마보기에 tokenizers을 무엇