未创建 'Raw' 值的 Elasticsearch 多字段

标签 elasticsearch

根据 ElasticSearch 文档,我正在尝试将已分析字段的未分析版本添加为“原始”多字段:
https://www.elastic.co/guide/en/elasticsearch/reference/2.4/multi-fields.html

这似乎是一种常见的、得到良好支持的模式。

我创建了以下索引/字段:

{ 
 "person": {  
    "aliases": {},   
    "mappings": {   
       "employee": {   
       "properties": {      
            "userName": {
                "type": "string",
                "analyzer": "autocomplete",
                "fields": {
                    "raw": {
                       "type": "string",
                       "index": "not_analyzed"
                     }
                 }
            }
        }
    } 
 }

如果我直接查询索引,即 GET/person,我会看到上面发布的映射,所以我确信没有语法错误等。

但是,当我们将数据推送到索引中时,不会创建 userName.raw 字段。
{
  "_index": "person",    
  "_type": "employee",    
  "_id": "2",    
  "_version": 1,   
  "found": true,    
  "_source": {    
  "username": "Test Value"    
  }     
}    

有人看到我缺少的东西吗?

谢谢!

编辑:
这是创建索引时的新手错误。
PUT person
{
  "person": {
    "aliases": {},
    "mappings": {
      "employee": {
        "properties": {
          "email": {

请注意,人员键被放入“人员”索引中。这是在创建一个嵌套的人。

正确的语法是去掉多余的“人”
PUT person
    {
        "aliases": {},
        "mappings": {
          "employee": {
            "properties": {
              "email": {

请参阅 Linoy.M.K 的回答,因为他是正确的。
按 ID 检索记录时不会出现“原始”字段。它仅作为查询的一部分有用。

最佳答案

添加多个分析器不会修改您的源文档意味着您的源文档将始终只有用户名而不是 username.raw

添加的分析器在您进行搜索时很有用,这意味着您现在可以使用 username 和 username.raw 进行搜索以实现不同的行为,如下所示。

  GET /person/employee/_search
    {
        "query": {
            "match": {
               "username": "Te"
            }
        }
    }

GET /person/employee/_search
        {
            "query": {
                "match": {
                   "username.raw": "Test Value"
                }
            }
        }

关于未创建 'Raw' 值的 Elasticsearch 多字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40271980/

相关文章:

elasticsearch - grok不解析日志

django - 如何配置 Haystack/Elasticsearch 以处理单词开头附近的缩写和撇号

elasticsearch - 未知的发现类型[gce]

elasticsearch - Kibana刷新时Elasticsearch CPU峰值

amazon-ec2 - Logstash 架构决策

azure - 如何向 Azure 托管的 Elastic Search 添加更多节点

elasticsearch - 您如何在 ElasticSearch 内联脚本中使用 min/max?

elasticsearch - 如何使用单个 Elastic 搜索查询进行重复数据删除和执行聚合?

java - Apache Lucene QueryParser.parse 未在 FuzzyQuery 上使用分析器

elasticsearch - 在Elasticsearch索引中存储MD5哈希的正确方法