首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elasticsearch同义词搜索分析器更新后没有更新synonyms.txt?

Elasticsearch同义词搜索分析器更新后没有更新synonyms.txt?
EN

Stack Overflow用户
提问于 2018-10-09 14:28:42
回答 2查看 998关注 0票数 0

因此,我在搜索分析器中定义了一个具有同义词映射的索引。当我第一次创建索引时,这些同义词是在搜索时发现的。之后,我更新了节点上的synonyms.txt文件一次,以更新同义词映射,并在进行更改后重新启动每个节点。这导致同义词的变化反映在搜索上,尽管索引。

现在,当我更改同义词文件并重新启动节点时,同义词映射并不像我认为应该更新的那样更新。我是不是遗漏了什么?我想,由于同义词映射在search_analyzer上,所以不必每次都重新编制索引来反映更改。

以下是我的索引定义:

代码语言:javascript
复制
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开始

但也没有让我的改变反映出来。我是否需要在每次更新同义词文件时重新编制索引,即使它是搜索分析器?

EN

回答 2

Stack Overflow用户

发布于 2018-10-09 17:54:16

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

代码语言:javascript
复制
POST /synonym_index/_close

POST /synonym_index/_open

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

票数 0
EN

Stack Overflow用户

发布于 2021-03-10 13:57:23

也许您要寻找的是:https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-reload-analyzers.html

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

代码语言:javascript
复制
"search_synonyms" : {
    "type" : "synonym_graph",
    "synonyms_path" : "analysis/synonyms.txt",
    "updatable": true
}

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

代码语言:javascript
复制
"mappings": {
    "properties": {
        "one_attribute": {
            "type": "text",
            "search_analyzer": "english_and_synonyms" 
        }
    }
}

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52723452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档