如何在ElasticSearch中创建索引时指定分析器

Alf*_*lfe 20 mapping indexing analyzer elasticsearch

我想指定一个分析器,命名它,并在创建索引时在映射中使用该名称.我输了,我的ES实例总是给我一个错误信息.

这大致就是我想做的事情:

"settings": {
  "mappings": {
    "alfedoc": {
      "properties": {
        "id": { "type": "string" },
        "alfefield": { "type": "string", "analyzer": "alfeanalyzer" }
      }
    }
  },
  "analysis": {
    "analyzer": {
      "alfeanalyzer": {
        "type": "pattern",
        "pattern":"\\s+"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用; ES实例总是给我一个错误

MapperParsingException[mapping [alfedoc]]; nested: MapperParsingException[Analyzer [alfeanalyzer] not found for field [alfefield]];
Run Code Online (Sandbox Code Playgroud)

我尝试将"analysis"字典的分支放在几个地方(在映射等内部),但无济于事.我想一个完整的例子(我现在找不到)也会帮助我.可能我错过了一些基本的东西.

Sco*_*ice 28

"分析"进入"设置"块,在创建索引时,在"映射"块之前或之后.

"settings": {
    "analysis": {
        "analyzer": {
            "alfeanalyzer": {
                "type": "pattern",
                "pattern": "\\s+"
            }
        }
    }
},
"mappings": {
    "alfedoc": { ... }
}
Run Code Online (Sandbox Code Playgroud)

这是一个很好的完整示例:示例1

  • 是的,的确,我忘记了"设置"下的最后一个支撑.因此,"设置"和"映射"应该是2个单独的块,"分析"应该包含在"设置"块中. (4认同)