当前位置: 首页 > 面试题库 >

更改Elasticsearch中现有索引的设置和映射

陶星辰
2023-03-14
问题内容

我想要对Elasticsearch中已存在的索引进行以下设置和映射设置:

{
    "analysis": {
        "analyzer": {
            "dot-analyzer": {
                "type": "custom",
                "tokenizer": "dot-tokenizer"
            }
        },
        "tokenizer": {
            "dot-tokenizer": {
                "type": "path_hierarchy",
                "delimiter": "."
            }
        }
    }
}

{
    "doc": {
        "properties": {
            "location": {
                "type": "string",
                "index_analyzer": "dot-analyzer",
                "search_analyzer": "keyword"
            }
        }
    }
}

我试图添加以下两行代码:

client.admin().indices().prepareUpdateSettings(Index).setSettings(settings).execute().actionGet();
client.admin().indices().preparePutMapping(Index).setType(Type).setSource(mapping).execute().actionGet();

但这是结果:

org.elasticsearch.index.mapper.MapperParsingException: Analyzer [dot-analyzer] not found for field [location]

任何人?非常感谢,

斯汀

这似乎可行:

if (client.admin().indices().prepareExists(Index).execute().actionGet().exists()) {            
    client.admin().indices().prepareClose(Index).execute().actionGet();
    client.admin().indices().prepareUpdateSettings(Index).setSettings(settings.string()).execute().actionGet();
    client.admin().indices().prepareOpen(Index).execute().actionGet();
    client.admin().indices().prepareDeleteMapping(Index).setType(Type).execute().actionGet();
    client.admin().indices().preparePutMapping(Index).setType(Type).setSource(mapping).execute().actionGet();
} else {
    client.admin().indices().prepareCreate(Index).addMapping(Type, mapping).setSettings(settings).execute().actionGet();
}

问题答案:

如果在发送更改后查看设置,您会发现分析仪不存在。实际上,您不能在实时索引上更改设置的“分析”部分。最好使用所需的设置来创建它,否则您可以将其关闭:

curl -XPOST localhost:9200/index_name/_close

关闭索引后,您可以发送新设置。之后,您可以重新打开索引:

curl -XPOST localhost:9200/index_name/_open

关闭索引后,它不会使用任何群集资源,但是它既不可读也不可写。如果要使用Java API关闭并重新打开索引,可以使用以下代码:

client.admin().indices().prepareClose(indexName).execute().actionGet();
//TODO update settings
client.admin().indices().prepareOpen(indexName).execute().actionGet();


 类似资料:
  • 我对弹性搜索一无所知。所以,如果这是一个愚蠢的问题,请原谅我,我的问题可能已经在其他地方得到了回答,但我找不到。我想使用弹性搜索作为我的网络中PDF和docx的搜索引擎。我使用fscrawler将PDF文件吸收到弹性搜索中。因为我要摄取的文档是几种语言的,所以我想使用n-graming进行词干分析。为此,我想像这样更新我的映射 现在我收到了这个错误信息 {“error”:{“root_cause”

  • 我可以用CURL设置breaker.fielddata限制,但不遵守config中的设置: ES版本:1.6.0 在我的节点配置中 /etc/elasticsearch/elasticsearch.yml 配置中将fielddata限制设置为60%(8G堆中的4.7G),但是: 我可以将indices.breaker.fielddata.limit更改为60% 为什么配置中的行形式不受尊重?

  • 我想为我的索引更新elasticsearch中的默认映射。但是所有的文档都指出我们必须为更新映射提供类型。问题是我有很多索引类型,它们是动态创建的,就像新类型的文档出现时一样。所以最好的处理方法是默认映射类型。因为我不必为每个类型定义映射。但现在我无法更新我的索引默认映射。如果可能的话,请告诉我?

  • 我目前正在使用ElasticSearch(PHP客户端)构建一个电子商务系统搜索,但遇到了一个问题 我存储的数据是简单文本(如产品名称)和列表(如颜色、大小)的混合体 我遇到的问题是当产品没有任何颜色时 我有以下字段 所以当我发送一个产品时,它看起来是这样的 这就像预期的一样,但是当我尝试发送这样的东西时 它抛出了一个错误: {“error”:{“root_cause”:[{“type”:“map

  • 问题内容: 我需要更改索引中的分片数量。索引很大,为了达到测试目的,我可能不得不将配置更改10-15次才能满意。是否有开箱即用的工具提供这种功能?或最简单的方法是做到这一点? 问题答案: 无论是Perl的和Ruby客户直接支持重建索引。 在Perl中,您可以执行以下操作: 在Clinton Gormley 的帖子中查找更多信息。 在Ruby中,您可以执行以下操作: 在相关的 Tyre 提交中找到更

  • 问题内容: 我可以看到文档说我们可以在文档上设置,但不能在索引/索引上设置。还想知道如果我们设置它是否对性能有影响。 问题答案: 已为每个索引启用,但有效期为每个文档。 如果您希望索引“过期”,请删除它们。更简单,更高效。 是的,对性能有影响。Elasticsearch处理“过期”数据的“方式”是创建基于时间的索引。意思是,您每天或每周都会创建一个索引。在该索引中索引属于该日/周的所有内容。您决定