ElasticSearch:在设置 search_analyzer 时必须设置字段上的分析器

Nat*_*Uni 2 elasticsearch

我已经阅读了以前版本的 ES (< 2),其中“token_analyzer”键需要更改为“analyzer”。但无论我做什么,我仍然收到此错误:

"type": "mapper_parsing_exception",
"reason": "analyzer on field [email] must be set when search_analyzer is set"
Run Code Online (Sandbox Code Playgroud)

这是我在收到错误时通过 PUT 函数传递给 ES 的内容:

{ 
    "settings": {
      "analysis": {
        "analyzer": {
          "my_email_analyzer": {
            "type": "custom",
            "tokenizer": "uax_url_email",
            "filter": ["lowercase", "stop"]
          }
        }
      }
    },
    "mappings" : {
        "uuser": {
            "properties": {
                "email": {
                  "type": "text",
                  "search_analyzer": "my_email_analyzer",
                  "fields": {
                    "email": { 
                      "type":  "text",
                      "analyzer": "my_email_analyzer"
                    }
                  }
                },
                "facebookId": {
                    "type": "text"
                },
                "name": {
                    "type": "text"
                },
                "profileImageUrl": {
                    "type": "text"
                },
                "signupDate": {
                    "type": "date"
                },
                "username": {
                    "type": "text"
                }
                ,
                "phoneNumber": {
                    "type": "text"
                }
            }

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

任何想法有什么问题?

Ada*_*m T 5

因为您已为该字段指定了search_analyzer,您还必须指定在索引时使用的分析器。例如,在您指定 search_analyzer 的位置下添加以下行:

"analyzer": "standard",
Run Code Online (Sandbox Code Playgroud)

给你这个:

{ 
    "settings": {
      "analysis": {
        "analyzer": {
          "my_email_analyzer": {
            "type": "custom",
            "tokenizer": "uax_url_email",
            "filter": ["lowercase", "stop"]
          }
        }
      }
    },
    "mappings" : {
        "uuser": {
            "properties": {
                "email": {
                  "type": "text",
                  "search_analyzer": "my_email_analyzer",
                  "analyzer": "standard",
                  "fields": {
                    "email": { 
                      "type":  "text",
                      "analyzer": "my_email_analyzer"
                    }
                  }
                },
                "facebookId": {
                    "type": "text"
                },
                "name": {
                    "type": "text"
                },
                "profileImageUrl": {
                    "type": "text"
                },
                "signupDate": {
                    "type": "date"
                },
                "username": {
                    "type": "text"
                }
                ,
                "phoneNumber": {
                    "type": "text"
                }
            }

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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