处理所有格(撇号)与英语词干在1.2和1.4之间的差异

时间:2015-01-07 07:32:10

标签: elasticsearch lucene stemming porter-stemmer

我们有两个弹性搜索实例,一个运行1.2.1和一个1.4,设置和映射在两个实例上运行的索引上是相同的,但结果是不同的。

默认分析器的设置:

....
analysis: {
 filter: {
  ourEnglishStopWords: {
   type: "stop",
   stopwords: "_english_"
  },
  ourEnglishFilter: {
   type: "stemmer",
   name: "english"
  }
 },
 analyzer: {
  default: {
   filter: [
    "asciifolding",
    "lowercase",
    "ourEnglishStopWords",
    "ourEnglishFilter"
   ],
   tokenizer: "standard"
  }
 }
},
...

在索引/搜索所有格形式时会出现弹性搜索版本之间的差异, 而在1.2.1“玩家”中,“玩家”和“玩家”将在1.4中返回相同的结果 前两个(“玩家”和“玩家”)具有相同的结果集,而“玩家”与该集合不匹配 这是一个已知的差异吗?在1.4及以上版本中获得相同行为的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

我认为this是1.3.0中引入的变化:

  

StemmerTokenFilter有很多问题:

     
      
  1. 英语退回了慢雪球英语词干
  2.   
  3. porter2返回了雪球Porter stemmer(v1)
  4.         

    的变化:

         
        
    1. english现在返回快速的PorterStemmer(用于创建的索引)   v1.3.0起)
    2.   
    3. porter2现在返回雪球英语词干(对于从v1.3.0开始创建的索引)
    4.   

根据该github问题,您可以将映射更改为:

    "ourEnglishFilter": {
      "type": "stemmer",
      "name": "porter2"
    }

或尝试其他方式:

 "filter": {
    "ourEnglishStopWords": {
      "type": "stop",
      "stopwords": "_english_"
    },
    "ourEnglishFilter": {
      "type": "stemmer",
      "name": "english"
    },
    "possesiveEnglish": {
      "type": "stemmer",
      "name": "possessive_english"
    }
  },
  "analyzer": {
    "default": {
      "filter": [
        "asciifolding",
        "lowercase",
        "ourEnglishStopWords",
        "possesiveEnglish",
        "ourEnglishFilter"
      ],
      "tokenizer": "standard"
    }
  }