代码之家  ›  专栏  ›  技术社区  ›  mel

Elasticsearch:在我的英语分析器上添加同义词过滤器

  •  3
  • mel  · 技术社区  · 9 年前

    我有一个带字段描述的索引,分析如下:

    "description":{
          "analyzer" : "english",
          "type" : "string"
    }
    

    我在同义词文件中定义了同义词词典。txt,其中包含:

    ipod, i-pod, i pod => i-pod
    

    我想把这个同义词词典添加到我的分析器中,但我不知道怎么做。我应该定义自定义分析器吗?但如果我这样做,我会因为这种定制而偏离当前的指数化

    1 回复  |  直到 9 年前
        1
  •  9
  •   femtoRgon    9 年前

    是的,您应该定义自定义分析器。您可以从 standard English analyzer ,并将同义词筛选器添加到:

    {
      "settings": {
        "analysis": {
          "filter": {
            "english_stop": {
              "type":       "stop",
              "stopwords":  "_english_" 
            },
            "english_keywords": {
              "type":       "keyword_marker",
              "keywords":   [] 
            },
            "english_stemmer": {
              "type":       "stemmer",
              "language":   "english"
            },
            "english_possessive_stemmer": {
              "type":       "stemmer",
              "language":   "possessive_english"
            },
            "my_synonyms" : {
              "type" : "synonym",
              "synonyms_path" : "path/to/synonym.txt"
            }
          },
          "analyzer": {
            "custom_english": {
              "tokenizer":  "standard",
              "filter": [
                "english_possessive_stemmer",
                "lowercase",
                "my_synonyms",
                "english_stop",
                "english_keywords",
                "english_stemmer"
              ]
            }
          }
        }
      }
    }
    

    至于是否会出现分歧,是的。如果要将同义词应用于索引时间,则新索引的数据将应用同义词筛选器,而现有数据则不会。如果您希望对索引时间分析的更改始终适用,则需要重新索引数据。

    如果对分析的更改仅在 search_analyzer ,则无需重新索引。