Elasticsearch查询构建器搜索确切的电子邮件

时间:2018-07-17 14:33:05

标签: java spring-boot elasticsearch

问题:

使用Elasticsearch 5.6.8版,我想搜索确切的电子邮件地址。

我有两个同时在6.1.0和5.6.8版本上运行的ES服务器。我可以在6.1.0版中轻松搜索电子邮件(请参见下面的代码),但在5.6.8版中则无法使用。

由于我的登台服务器和生产服务器都在5.6.8版本上运行,因此我需要使其在5.6.8版本上可用。

顺便说一句,当我说它不起作用时..这意味着它不返回任何结果或结果是错误的。

试用版:适用于6.1.0,但不适用于5.6.8

试图将email的类型从text更改为keyword,但还是没有运气。

"email": {
    "type": "keyword",
    "ignore_above": 256,
    "normalizer": "custom_sort_normalizer"
}

下面是我的索引,映射,查询等的详细信息。

创建用户索引

PUT http://localhost:9200/acme_users

{
  "settings": {
    "analysis": {   
      "normalizer": {
        "custom_sort_normalizer": {
          "type": "custom",
          "char_filter": [],
          "filter": ["lowercase", "asciifolding"]
        }
      }
    }
  }
}

为用户设置映射

PUT http://localhost:9200/acme_users/_mapping/user

{
  "properties": {
        "name": {
            "type": "text",
            "fields": {
                "keyword": {
                    "type": "keyword",
                    "ignore_above": 256,
                "normalizer": "custom_sort_normalizer"
                }
            }
        },
        "company": {
            "type": "text",
            "fields": {
                "keyword": {
                    "type": "keyword",
                    "ignore_above": 256,
                    "normalizer": "custom_sort_normalizer"
                }
            }
        },
        "country": {
            "type": "text",
            "fields": {
                "keyword": {
                    "type": "keyword",
                    "ignore_above": 256,
                    "normalizer": "custom_sort_normalizer"
                }
            }
        },
        "role": {
            "properties": {
                "title": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256,
                            "normalizer": "custom_sort_normalizer"
                        }
                    }
                }
            }
        },
        "groups": {
            "properties": {
                "name": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256,
                            "normalizer": "custom_sort_normalizer"
                        }
                    }
                }
            }
        },
        "groupsKeyword": {
            "type": "text",
            "fields": {
                "keyword": {
                    "type": "keyword",
                    "ignore_above": 256,
                    "normalizer": "custom_sort_normalizer"
                }
            }
        },      
        "email": {
            "type": "keyword",
            "ignore_above": 256,
            "normalizer": "custom_sort_normalizer"
        }
  }
}

查询

GET http://localhost:9200/acme_users/user/_search

{
  "from" : 0,
  "size" : 15,
  "query" : {
    "bool" : {
      "must" : [
        {
          "query_string" : {
            "query" : "activedInd: true AND deletedInd: false",
            "fields" : [ ],
            "use_dis_max" : true,
            "tie_breaker" : 0.0,
            "default_operator" : "or",
            "auto_generate_phrase_queries" : false,
            "max_determinized_states" : 10000,
            "enable_position_increments" : true,
            "fuzziness" : "AUTO",
            "fuzzy_prefix_length" : 0,
            "fuzzy_max_expansions" : 50,
            "phrase_slop" : 0,
            "escape" : false,
            "split_on_whitespace" : true,
            "boost" : 1.0
          }
        },
        {
          "query_string" : {
            "query" : "bungoton.si.bryan@gmail.com*",
            "fields" : [ ],
            "use_dis_max" : true,
            "tie_breaker" : 0.0,
            "default_operator" : "or",
            "auto_generate_phrase_queries" : false,
            "max_determinized_states" : 10000,
            "enable_position_increments" : true,
            "fuzziness" : "AUTO",
            "fuzzy_prefix_length" : 0,
            "fuzzy_max_expansions" : 50,
            "phrase_slop" : 0,
            "escape" : false,
            "split_on_whitespace" : true,
            "boost" : 1.0
          }
        }
      ],
      "disable_coord" : false,
      "adjust_pure_negative" : true,
      "boost" : 1.0
    }
  },
  "sort" : [
    {
      "name.keyword" : {
        "order" : "asc"
      }
    }
  ]
}

如果我在查询值中使用*,则它不会在5.6.8上返回任何内容,但是会在6.1.0上返回准确的记录。

"query" : "bungoton.si.bryan@gmail.com*"

5.6.8上,如果我删除*,它将返回结果,但是将返回所有电子邮件中包含gmail.com的帐户。在Windows端完成效果相同。

我不知道我在想什么。它只是在5.6.8上不返回任何内容。

顺便说一下,查询部分是从我的Java应用程序(ES高级Java客户端)生成的。

0 个答案:

没有答案