2013-04-24 82 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

双方将切断 “的”。