首页 > 解决方案 > Elasticsearch 同义词搜索分析器在更新 synonyms.txt 后没有更新?

问题描述

所以我有一个在搜索分析器中定义的同义词映射的索引。当我第一次创建索引时,同义词是在搜索中找到的。之后,我更新了synonyms.txt节点上的文件一次以更新同义词映射,并在进行更改后重新启动每个节点。这导致同义词更改反映在整个索引的搜索中。

现在,当我更改同义词文件并重新启动节点时,同义词映射并没有像我认为的那样更新。我错过了什么吗?我认为由于同义词映射位于 search_analyzer 上,因此我不必每次都重新索引以反映更改。

这是我的索引定义:

PUT /synonym_index
{
  "aliases": {},
  "mappings": {
    "_doc": {
      "properties": {
        "name": {
          "type": "text",
          "fields": {
            "english": {
              "type": "text",
              "analyzer": "english",
              "search_analyzer":"english_and_synonyms"
            }
          }
        }
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "english": {
          "tokenizer":  "standard",
          "filter": [
            "english_possessive_stemmer",
            "lowercase",
            "english_stop",
            "english_keywords",
            "english_stemmer"
          ]
        },
        "english_and_synonyms": {
          "tokenizer":  "standard",
          "filter": [
            "search_synonyms",
            "english_possessive_stemmer",
            "lowercase",
            "english_stop",
            "english_keywords",
            "english_stemmer"
          ]
        }
      },
      "filter": {
        "english_stop": {
          "type":       "stop",
          "stopwords":  "_english_" 
        },
        "english_keywords": {
          "type":       "keyword_marker",
          "keywords":   ["example"] 
        },
        "english_stemmer": {
          "type":       "stemmer",
          "language":   "english"
        },
        "english_possessive_stemmer": {
          "type":       "stemmer",
          "language":   "possessive_english"
        },
        "search_synonyms" : {
            "type" : "synonym_graph",
            "synonyms_path" : "analysis/synonyms.txt"
        }
      }
    },
    "index": {
      "number_of_shards": "5",
      "number_of_replicas": "1"
    }
  }
}

我试过用

须藤服务弹性搜索重启

并且还与

sudo service elasticsearch stop sudo service elasticsearch start

但两者都没有引起我的变化反映。即使它是搜索分析器,每次更新同义词文件时是否都需要重新索引?

标签: elasticsearch

解决方案


也许您正在寻找 Reload Search Analyzers API: https ://www.elastic.co/guide/en/elasticsearch/reference/current/indices-reload-analyzers.html

您必须声明您的同义词是updatable

"search_synonyms" : {
    "type" : "synonym_graph",
    "synonyms_path" : "analysis/synonyms.txt",
    "updatable": true
}

在您的映射中,您需要声明您的自定义 search_analyzer:

"mappings": {
    "properties": {
        "one_attribute": {
            "type": "text",
            "search_analyzer": "english_and_synonyms" 
        }
    }
}

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-analyzer.html

即使它是搜索分析器,每次更新同义词文件时是否都需要重新索引?

仅当在索引期间使用您的同义词时。如果它们仅在搜索期间使用,则不必每次都重新索引。


推荐阅读