当前位置:   article > 正文

es系列:忽略大小写查询_es查询忽略大小写

es查询忽略大小写

对于elasticsearch查询忽略大小写的问题,官方给出了一个解决方案,使用normalizer来解决,normalizer是keyword的一个属性,可以对keyword生成的单一term,query_string做进一步的处理,比如lowercase,小写转换,使用方式和自定义分词器有相似之处,需要自定义,具体步骤如下。所以keyword 才可以配置normalizer. 

已有的索引,如何忽略大小写? 

注意:

        对已有索引中字段,增加normalizer属性, 新增数据或者更新的数据,查询是生效的.

        但是历史数据, 如果不更新,则不生效的. 所以你需要reindex处理

        如果你的系统,可以重新同步一次数据,即更新当前ES里面数据,就不需要reindex了

1 如果数据可以重新同步一次的,步骤如下.(不建议,因为查询的字段会变成:institute_code_zcy.keywordquery)

第一步:  以动态更新原有索引的setting,动态更新setting,需要先关闭索引,执行玩更新操作以后,再开启索引

  1. #关闭索引
  2. POST project_zcy/_close
  3. #在setting增加lowercase_normalizer (名字自定义)
  4. PUT project_zcy/_settings
  5. {
  6. "index": {
  7. "analysis": {
  8. "normalizer": {
  9. "lowercase_normalizer": {
  10. "type": "custom",
  11. "char_filter": [],
  12. "filter": [
  13. "lowercase"
  14. ]
  15. }
  16. }
  17. }
  18. }
  19. }
  20. #打开索引
  21. POST project_zcy/_open

第二步: 动态对一个字段 增加normalizer, 后续查询时候,要调整为institute_code_zcy.keywordquery

而不是institute_code_zcy.keyword

  1. 原来:
  2. {
  3. "properties":{
  4. "institute_code_zcy" : {
  5. "type" : "text",
  6. "fields" : {
  7. "keyword" : {
  8. "type" : "keyword",
  9. "ignore_above" : 256,
  10. }
  11. }
  12. }
  13. }
  14. }
  15. PUT project_zcy/_mapping
  16. {
  17. "properties":{
  18. "institute_code_zcy" : {
  19. "type" : "text",
  20. "fields" : {
  21. "keywordquery" : {
  22. "type" : "keyword",
  23. "ignore_above" : 256,
  24. "normalizer" : "lowercase_normalizer"
  25. }
  26. }
  27. }
  28. }
  29. }
  30. 结果:
  31. {
  32. "properties":{
  33. "institute_code_zcy" : {
  34. "type" : "text",
  35. "fields" : {
  36. "keyword" : {
  37. "type" : "keyword",
  38. "ignore_above" : 256,
  39. },
  40. "keywordquery" : {
  41. "type" : "keyword",
  42. "ignore_above" : 256,
  43. "normalizer" : "lowercase_normalizer"
  44. }
  45. }
  46. }
  47. }
  48. }

第三步: 

        重新同步一次数据到ES, 这样历史数据才生效

2 重建索引的方式

第一步: 新建新的索引

  1. PUT /project_zz
  2. {
  3. "mappings" : {
  4. "properties" : {
  5. "alarm" : {
  6. "type" : "text",
  7. "fields" : {
  8. "keyword" : {
  9. "type" : "keyword",
  10. "ignore_above" : 256
  11. }
  12. }
  13. },
  14. "dept_code" : {
  15. "type" : "text",
  16. "fields" : {
  17. "keyword" : {
  18. "type" : "keyword",
  19. "ignore_above" : 256,
  20. "normalizer" : "lowercase_normalizer"
  21. }
  22. }
  23. },
  24. "institute_code" : {
  25. "type" : "text",
  26. "fields" : {
  27. "keyword" : {
  28. "type" : "keyword",
  29. "ignore_above" : 256,
  30. "normalizer" : "lowercase_normalizer"
  31. }
  32. }
  33. },
  34. "update_time" : {
  35. "type" : "date",
  36. "format" : "yyyy-MM-dd HH:mm:ss"
  37. }
  38. }
  39. },
  40. "settings" : {
  41. "index" : {
  42. "number_of_shards" : "1",
  43. "analysis" : {
  44. "normalizer" : {
  45. "lowercase_normalizer" : {
  46. "filter" : [
  47. "lowercase"
  48. ],
  49. "type" : "custom",
  50. "char_filter" : [ ]
  51. }
  52. }
  53. },
  54. "number_of_replicas" : "1"
  55. }
  56. }
  57. }

第二步: 重建索引

  1. POST _reindex
  2. {
  3. "source": {"index": "project_zcy"},
  4. "dest": {"index": "project_zz"}
  5. }

我们查询的时候: 大小写就能忽略查询到结果了

  1. GET /project_zcy/_search
  2. {
  3. "query": {
  4. "term": {
  5. "institute_code.keyword": {
  6. "value": "ORg211111"
  7. }
  8. }
  9. },
  10. "_source": "institute_code"
  11. }

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/article/detail/45947?site
推荐阅读
相关标签
  

闽ICP备14008679号