Elasticsearch同义词搜索分析器在更新onymouses.txt之后没有更新吗?

时间:2018-10-09 14:28:43

标签: elasticsearch

因此,我有一个索引,其中包含在搜索分析器中定义的同义词映射。当我第一次创建索引时,同义词是在搜索时选择的。之后,我一次更新了节点上的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服务elasticsearch重新启动

以及

  

sudo服务elasticsearch停止   sudo服务elasticsearch开始

,但都没有使我的更改反映出来。即使它是搜索分析器,每次更新同义词文件都需要重新索引吗?

2 个答案:

答案 0 :(得分:0)

要反映同义词文件中的更改,您需要在对文件进行更改后关闭并打开索引。这可以通过发布请求来完成:

POST /synonym_index/_close

POST /synonym_index/_open

在_open调用之后,您应该会看到更改反映在搜索结果中

答案 1 :(得分:0)

也许 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

<块引用>

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

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