当前位置:   article > 正文

Elasticsearch的使用RestHighLevelClient_resthighlevelclient 如何使用通配符查询

resthighlevelclient 如何使用通配符查询

目录

一、准备

1.1、依赖

1.2、测试数据

二、案例

2.1、全文搜索

2.1.1、匹配搜索(会拆词)

2.1.2、短语搜索

2.1.3、queryString搜索

2.1.4、多字段匹配搜索

2.2、词条级搜索

2.2.1、词条级搜索

2.2.2、词条集合搜索(terms query)

2.2.3、范围搜索( range query)

2.2.4、不为空搜索(exists query)

2.2.5、词项前缀搜索(prefix query)

2.2.6、通配符搜索(wildcard query)

2.2.7、正则搜索

2.2.8、模糊搜索(fuzzy query)

2.2.9、 ids搜索(id集合查询)(ids query)

2.3、复合查询

2.3.1、排序

三、分词器

3.1、不设置分词器,使用默认分词器

3.2、指定分词器,使用IK最大分词 

3.3、指定分词器,使用IK最小分词


一、准备

1.1、依赖

  1. <elasticsearch.version>7.12.1</elasticsearch.version>
  2. <dependency>
  3. <groupId>org.elasticsearch.client</groupId>
  4. <artifactId>elasticsearch-rest-high-level-client</artifactId>
  5. <version>${elasticsearch.version}</version>
  6. <exclusions>
  7. <exclusion>
  8. <groupId>commons-logging</groupId>
  9. <artifactId>commons-logging</artifactId>
  10. </exclusion>
  11. </exclusions>
  12. </dependency>

1.2、测试数据

  1. PUT /yuangong
  2. {
  3. "settings": {},
  4. "mappings": {
  5. "properties": {
  6. "name": {
  7. "type": "text",
  8. "analyzer": "ik_max_word"
  9. },
  10. "alias": {
  11. "type": "text"
  12. },
  13. "age": {
  14. "type": "integer"
  15. },
  16. "sex": {
  17. "type": "keyword"
  18. },
  19. "phone": {
  20. "type": "text"
  21. },
  22. "title": {
  23. "type": "text",
  24. "analyzer": "ik_max_word"
  25. },
  26. "slogan": {
  27. "type": "text"
  28. }
  29. }
  30. }
  31. }
  32. POST /yuangong/_doc/
  33. {
  34. "name": "张三三",
  35. "alias": "小张",
  36. "age": 28,
  37. "sex": "男",
  38. "phone": 183xxxx0000,
  39. "title": "初级Java开发",
  40. "slogan": "苟富贵,勿相忘"
  41. }
  42. POST /yuangong/_doc/
  43. {
  44. "name": "李四",
  45. "alias": "小四",
  46. "age": 25,
  47. "sex": "男",
  48. "phone": 183xxxx0001,
  49. "title": "高级Java开发",
  50. "slogan": "行路难,行路难,多歧路,今安在"
  51. }
  52. POST /yuangong/_doc/
  53. {
  54. "name": "王五",
  55. "alias": "五哥",
  56. "age": 30,
  57. "sex": "男",
  58. "phone": 183xxxxx0002,
  59. "title": "资深Java开发",
  60. "slogan": "逾期感慨路难行,不如马上出发"
  61. }
  62. POST /yuangong/_doc/
  63. {
  64. "name": "王六",
  65. "alias": "名与",
  66. "age": 28,
  67. "sex": "男",
  68. "phone": 183xxxx0003,
  69. "title": "高级前端开发",
  70. "slogan": "超越自己"
  71. }
  72. POST /yuangong/_doc/
  73. {
  74. "name": "王狗蛋",
  75. "alias": "狗蛋",
  76. "age": 31,
  77. "sex": "男",
  78. "phone": 183xxxx0004,
  79. "title": "高级产品经理",
  80. "slogan": "明哲保身"
  81. }
  82. POST /yuangong/_doc/
  83. {
  84. "name": "王麻子",
  85. "alias": "逍遥子",
  86. "age": 30,
  87. "sex": "女",
  88. "phone": 183xxxx0005,
  89. "title": "资深业务专家",
  90. "slogan": "鹏之大不知其几千里也"
  91. }
  92. POST /yuangong/_doc/
  93. {
  94. "name": "周二",
  95. "alias": "二子",
  96. "age": 22,
  97. "sex": "男",
  98. "phone": 18300000006,
  99. "title": "初级测试开发",
  100. "slogan": "冷冷的冰雨在我脸上胡乱的拍"
  101. }

二、案例

2.1、全文搜索

2.1.1、匹配搜索(会拆词)

和数据类型有关

(1)如果被查询的字段是keywork,查询的时候只能全量匹配,不会被拆分

(2)如果查询字段类型是text,查询的值会根据查询字段的分词器进行分词

如:如果没有设置分词器,张三三会拆成张、三、三,匹配出包含【张】或者【三】或者【三】的数据

如:如果设置IK分词器,

"name": {"type": "text","analyzer": "ik_max_word"}

张三三会拆成张三、三三,匹配出包含【张三】或者【三三】的数据

如:如果设置IK分词器,三三会拆成三三,匹配出包含【三三】的数据

(3)上面使用的是默认的operator默认OR, 设置operator为AND的时候

如:如果没有设置分词器,张三三会拆成张、三、三,匹配出包含【张】并且【三】并且【三】的数据

如:如果设置IK分词器,张三三会拆成张三、三三,匹配出包含【张三】并且【三三】的数据

如:如果设置IK分词器,三三会拆成三三,匹配出包含【三三】的数据

  1. public void matchQuery() throws IOException {
  2. // 搜索请求对象
  3. SearchRequest searchRequest = new SearchRequest("yuangong");
  4. // 搜索源构建对象
  5. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  6. MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "三三").operator(Operator.OR);
  7. doSearch(searchRequest,sea
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/860249
推荐阅读
相关标签
  

闽ICP备14008679号