直接测试句子的分词

  1. curl -XPOST "http://localhost:9200/_analyze" -H 'Content-Type: application/json' -d'
  2. {
  3. "analyzer": "ik_max_word",
  4. "text":"中华人民共和国国歌"
  5. }'
  1. POST _analyze
  2. {
  3. "analyzer": "ik_max_word",
  4. "text":"中华人民共和国国歌"
  5. }
  6. POST _analyze
  7. {
  8. "analyzer": "ik_smart", // 智能分词
  9. "text":"中华人民共和国国歌"
  10. }

ik_max_word

  1. {
  2. "tokens" : [
  3. {
  4. "token" : "中华人民共和国",
  5. "start_offset" : 0,
  6. "end_offset" : 7,
  7. "type" : "CN_WORD",
  8. "position" : 0
  9. },
  10. {
  11. "token" : "中华人民",
  12. "start_offset" : 0,
  13. "end_offset" : 4,
  14. "type" : "CN_WORD",
  15. "position" : 1
  16. },
  17. {
  18. "token" : "中华",
  19. "start_offset" : 0,
  20. "end_offset" : 2,
  21. "type" : "CN_WORD",
  22. "position" : 2
  23. },
  24. {
  25. "token" : "华人",
  26. "start_offset" : 1,
  27. "end_offset" : 3,
  28. "type" : "CN_WORD",
  29. "position" : 3
  30. },
  31. {
  32. "token" : "人民共和国",
  33. "start_offset" : 2,
  34. "end_offset" : 7,
  35. "type" : "CN_WORD",
  36. "position" : 4
  37. },
  38. {
  39. "token" : "人民",
  40. "start_offset" : 2,
  41. "end_offset" : 4,
  42. "type" : "CN_WORD",
  43. "position" : 5
  44. },
  45. {
  46. "token" : "共和国",
  47. "start_offset" : 4,
  48. "end_offset" : 7,
  49. "type" : "CN_WORD",
  50. "position" : 6
  51. },
  52. {
  53. "token" : "共和",
  54. "start_offset" : 4,
  55. "end_offset" : 6,
  56. "type" : "CN_WORD",
  57. "position" : 7
  58. },
  59. {
  60. "token" : "国",
  61. "start_offset" : 6,
  62. "end_offset" : 7,
  63. "type" : "CN_CHAR",
  64. "position" : 8
  65. },
  66. {
  67. "token" : "国歌",
  68. "start_offset" : 7,
  69. "end_offset" : 9,
  70. "type" : "CN_WORD",
  71. "position" : 9
  72. }
  73. ]
  74. }

ik_smart

  1. {
  2. "tokens" : [
  3. {
  4. "token" : "中华人民共和国",
  5. "start_offset" : 0,
  6. "end_offset" : 7,
  7. "type" : "CN_WORD",
  8. "position" : 0
  9. },
  10. {
  11. "token" : "国歌",
  12. "start_offset" : 7,
  13. "end_offset" : 9,
  14. "type" : "CN_WORD",
  15. "position" : 1
  16. }
  17. ]
  18. }

查询的应用

准备的数据:

  1. PUT blogs
  2. DELETE blogs
  3. PUT blogs/_mapping/_doc
  4. {
  5. "properties": {
  6. "title": {
  7. "type": "text",
  8. "analyzer": "ik_max_word"
  9. }
  10. }
  11. }
  12. PUT blogs/_doc/1
  13. {
  14. "title": "男扮女装"
  15. }
  16. // 该情况下会分词为「男扮女装」,「女装」
  17. PUT blogs/_doc/2
  18. {
  19. "title": "辣眼睛"
  20. }
  21. // 分词为「辣」,「眼睛」

查询:

  1. // 全文检索可以查到
  2. GET /blogs/_search
  3. {
  4. "query": {
  5. "match": {
  6. "title": {
  7. "query": "男扮女装"
  8. }
  9. }
  10. }
  11. }
  12. // 可以使用模糊查询,因为存在「男扮女装」这个词
  13. GET /blogs/_search
  14. {
  15. "query": {
  16. "wildcard": {
  17. "title": "男扮*"
  18. }
  19. }
  20. }
  21. // match_phrase 无法查询到该文档
  22. GET /blogs/_search
  23. {
  24. "query": {
  25. "match_phrase": {
  26. "title": "男扮"
  27. }
  28. }
  29. }
  1. ### **该词无法使用模糊查询,因为分词器会分成两个词,模糊查询只能查询分词后的词**
  2. GET /blogs/_search
  3. {
  4. "query": {
  5. "wildcard": {
  6. "title": "辣眼睛*"
  7. }
  8. }
  9. }
  10. ### **match 查询不影响**
  11. GET /blogs/_search
  12. {
  13. "query": {
  14. "match": {
  15. "title": "辣眼睛"
  16. }
  17. }
  18. }
  19. ### **match_phrase 查询不影响**
  20. GET /blogs/_search
  21. {
  22. "query": {
  23. "match_phrase": {
  24. "title": "辣眼睛"
  25. }
  26. }
  27. }