2013-04-24 1 views
2

"Joe Frankles", "Joe Frankle", "Joe Frankle 's"의 원본 텍스트 "Joe Frankle 's"와 일치하는 사용자 제출 쿼리를 보내려고합니다.ElostSearch에서 Abostoring (Possessive)을 무시합니다.

{ :type => 'string', :analyzer => 'snowball' } 

와 함께 검색 : 지금 우리는이 텍스트 (타이어/루비 형식)에있는 필드 색인하고

query { string downcased_query, :default_operator => 'AND' } 

을 나는이 실패했습니다 :

  create :settings => { 
       :analysis => { 
       :char_filter => { 
        :remove_accents => { 
        :type => "mapping", 
        :mappings => ["`=>", "'=>"] 
        } 
       }, 
       :analyzer => { 
        :myanalyzer => { 
        :type => 'custom', 
        :tokenizer => 'standard', 
        :char_filter => ['remove_accents'], 
        :filter => ['standard', 'lowercase', 'stop', 'snowball', 'ngram'] 
        } 
       }, 
       :default => { 
        :type => 'myanalyzer' 
       } 
      } 
      }, 

답변

0

귀하의 쿼리에서 당신이 _all 필드를 검색하는 것처럼 보이지만 귀하의 분석기는 개별 필드에만 적용됩니다. _all 필드에서이 기능을 사용하려면 간단히 make snowball your default analyzer입니다.

1

비슷한 문제가 발생하여 스노우 볼 분석기만으로는 작동하지 않았습니다. 그게 좋다고 생각하는지 모르겠다. 여기에 내가 무엇을 사용 : 분석기로 작업 할 때

properties: { 
    name: { 
    boost: 10, 
    type: 'multi_field', 
    fields: { 
     name:  { type: 'string', index: 'analyzed', analyzer: 'title_analyzer' }, 
     untouched: { type: 'string', index: 'not_analyzed' } 
    } 
    } 
} 

analysis: { 
    char_filter: { 
    remove_accents: { 
     type: "mapping", 
     mappings: ["`=>", "'=>"] 
    } 
    }, 
    filter: {}, 
    analyzer: { 
    title_analyzer: { 
     type: 'custom', 
     tokenizer: 'standard', 
     char_filter: ['remove_accents'], 
    } 
    } 
} 

Admin indices analyze tool도 아주 좋습니다.

1) ES의 문서에 설명 된대로 "possessive_english"형태소 분석기를 사용 : http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-stemmer-tokenfilter.html

예 :

{ 
    "index" : { 
    "analysis" : { 
     "analyzer" : { 
      "my_analyzer" : { 
       "tokenizer" : "standard", 
       "filter" : ["standard", "lowercase", "my_stemmer"] 
      } 
     }, 
     "filter" : { 
      "my_stemmer" : { 
       "type" : "stemmer", 
       "name" : "possessive_english" 
      } 
     } 
    } 
    } 
} 

를 사용하여 다른 형태소 분석기를

+0

정말 재미 있습니다. 이것은 "조 프랭클"이 "조 프랭클"과 일치하지만 "조 프랭클"이 "조 프랭클의"와 위의 일치를 나타낼 수 있도록 아포스트로피 만 제거하는 것처럼 보입니까? – LMH

+0

네, 그렇습니다. 저는 100 % 확신 할 수는 없지만 이것이 작동하도록 할 수있는 유일한 방법이었습니다. 나는 스웨덴의 눈싸움 btw를 사용하고 있습니다. 그게 중요한지 확실하지 않습니다. – Yeggeps

+0

고마워, 나는이 시도를했지만 작동하지 않는 것 같습니다. 위의 질문을 구문으로 업데이트했습니다. 어떤 훌륭한 아이디어라도? – LMH

3

소유 아포스트로피를 처리하는 두 개의 공식적인 방법이있다 원하는 경우 "possessive_english"필터 외에도 눈싸움을 할 수 있습니다. 해야합니다/작동해야하지만 테스트되지 않은 코드입니다. ES 워드 프로세서 :-) 나를 위해

{ 
    "index" : { 
    "analysis" : { 
     "analyzer" : { 
      "my_analyzer" : { 
       "tokenizer" : "standard", 
       "filter" : ["standard", "lowercase", "my_word_delimiter"] 
      } 
     }, 
     "filter" : { 
      "my_word_delimiter" : { 
       "type" : "word_delimiter", 
       "preserve_original": "true" 
      } 
     } 
    } 
    } 
} 

작품 :

2)는 "word_delimiter"필터를 사용 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-word-delimiter-tokenfilter.html

모두 "의"차단됩니다.

관련 문제