无法在 ElasticSearch 中正确索引电子邮件字段

Can't get email field to index correctly in ElasticSearch

我正在尝试设置一个电子邮件字段以在我的映射中正确编制索引。

因为我不希望 email 在被索引时被标记化,所以我之前指定了以下映射以允许它仅在整个字符串匹配时匹配搜索。

{
  "users": {
    "mappings": {
      "user": {
        "properties": {
          "email": {
            "type": "string",
            "index": "not_analyzed"
          },
          "name": {
            "type": "string",
            "fields": {
              "raw": {
                "type": "string",
                "index": "not_analyzed"
              }
            }
          },
          "nickname": {
            "type": "string"
          }
        }
      }
    }
  }
}

除了我希望将 emailnickname 字段作为小写进行比较外,此方法有效。

我尝试了几种方法来指定更改映射以使用小写标记过滤器。

我用以下方法完成了此操作:

{
  "settings":{
    "index":{
      "analysis":{
        "analyzer":{
          "lowercase_analyzer":{
            "tokenizer":"standard", //Also tried 'Simple' and 'Keyword'
            "filter":"lowercase"
          }
        }
      }
    }
  },

  "mappings": {
    "user": {
      "properties": {
        "email": {
          "type": "string",
          "analyzer":"lowercase_analyzer",
          "index": "not_analyzed" //Tried with and without this
        },
        "name": {
          "type": "string",
          "analyzer":"lowercase_analyzer",
          "fields": {
            "raw": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        },
        "nickname": {
          "type": "string",
          "analyzer": "lowercase_analyzer"
        }
      }
    }
  }
}

我希望允许以下行为:

您能否尝试以下操作,看看是否符合您的要求 - {

  "settings":{
     "index":{
        "analysis":{
           "analyzer":{
              "flat":{
                 "tokenizer":"keyword",
                 "filter":"lowercase"
              }
           }
        }
     }
    },

    "mappings": {
     "user": {
        "properties": {
           "email": {
             "type": "string",
             "analyzer":"flat"
           },
           "name": {
              "type": "string",
               "fields": {
                  "raw": {
                    "type": "string",
                    "index": "not_analyzed"
                  }
                }
           },
           "nickname": {
              "type": "string"
           }
        }
     }
  }
}