2017-02-13 5 views
0

일부 문자열로 시작하는 필드별로 문서를 필터링하는 방법은 무엇입니까? 이제 필드에이 문자열로 시작하는 단어가 들어있는 모든 문서가 나타납니다. 가장 좋은 결과는 가장 가까운 필터 순서로 정렬하는 것과 같은 결과에 대한 정확한 시작부터 어떻게 시작하는지에 대한 답이있는 경우입니다. 감사.
처럼 : 당신은 string를 사용해야 할거야Solr 6.4.2, startswith 문자열이있는 문서 필터링

 <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.EnglishPossessiveFilterFactory"/> 
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" /> 
     <filter class="solr.PorterStemFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.EnglishPossessiveFilterFactory"/> 
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
     <filter class="solr.EnglishMinimalStemFilterFactory"/> 
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" /> 
     <filter class="solr.PorterStemFilterFactory"/> 
     </analyzer> 
    </fieldType> 

답변

0

:

 
company_name:(max*) 
result : ['Maximum speed', 'Min & Max', 'Mirana max parrot'] 

가 지금은 텍스트 필드에 대해이 설정이 있습니다

 
company_name:(max*) 
result : ['Min & Max', 'Maximum speed', 'Mirana max parrot'] 

그러나 나는 그것을 좋아합니다 필드 (StrField으로 구현 됨) 또는 KeywordTokenizer이있는 TextField을 토큰 라이저 클래스로 사용합니다.

이유는 와일드 카드 일치가 토큰에 대해 수행되고 문자열이 여러 토큰으로 분할 될 때 각 토큰이 와일드 카드와 일치하기 때문입니다. string 클래스는 전체 문자열을 단일 토큰으로 유지하지만 KeywordTokenizer는 동일한 기능을 수행하지만 KeywordTokenizer를 사용하면 토큰을 저장하기 전에 문자열을 소문자로 처리하는 등의 다른 필터도 지정할 수 있습니다.

0

EdgeNGrams를 사용하는 경우 쿼리에 *를 입력 할 필요가 없습니다. 접두어를 붙이면됩니다. 또한 EdgeNGram은 인덱스 구성에만 포함되어야하고 쿼리에는 포함되어서는 안됩니다. 현재로서는 나머지에 관계없이 기본적으로 이 처음 3 자로 매치됩니다.

두 가지를 수정하고 다시 시도하는 것이 좋습니다 (재로드, 색인 생성 파이프 라인이 변경되지 않았으므로 다시 색인 할 필요 없음).