2013-04-24 87 views
2

我試圖獲得用戶提交的「Joe Frankles」,「Joe Frankle」,「Joe Frankle's」的查詢以匹配原始文本「Joe Frankle's」。現在,我們正索引字段這段文字是在(輪胎/紅寶石格式):在ElasticSearch中忽略撇號(所有權)

{ :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' 
       } 
      } 
      }, 

回答

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與分析儀工作時也很大。

+0

真的很有意思。這看起來好像只是刪除了撇號,所以「喬·弗蘭克斯」會匹配「喬·弗蘭克的」,但是「喬·弗蘭克」會與上面的「喬·弗蘭克的」匹配嗎? – LMH 2013-04-25 21:25:54

+0

是的,對我而言,我不是100%確定爲什麼,但這是我能夠實現它的唯一方法。我使用瑞典雪球順便說一句,不知道這是否重要。 – Yeggeps 2013-04-26 10:04:31

+0

謝謝,我給了這個嘗試,但它似乎並沒有工作。我用語法更新了上面的問題。任何精彩的想法? – LMH 2013-04-26 15:36:31

3

有處理佔有慾撇號兩種官方途徑:)

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" 
      } 
     } 
    } 
    } 
} 

使用其它詞幹或者除了「擁有者英語」過濾器之外還有雪球。應該/必須工作,但它是未經測試的代碼。

2)使用 「word_delimiter」 過濾器:

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

工作對我來說:-) ES文檔: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-word-delimiter-tokenfilter.html

雙方將切斷 「的」。