一般一个index在每个节点有一个shard,每个shard有一个副本

  1. PUT /career_plan_sku_index_15
  2. {
  3. "settings": {
  4. // 几个分片
  5. "number_of_shards": 3,
  6. // 每个分片有多少个副本
  7. "number_of_replicas": 1
  8. },
  9. "mappings": {
  10. "properties": {
  11. "skuId": {
  12. "type": "keyword"
  13. },
  14. "skuName": {
  15. "type": "text",
  16. "analyzer": "ik_max_word",
  17. "search_analyzer": "ik_smart"
  18. },
  19. "category": {
  20. "type": "keyword"
  21. },
  22. "basePrice": {
  23. "type": "integer"
  24. },
  25. "vipPrice": {
  26. "type": "integer"
  27. },
  28. "saleCount": {
  29. "type": "integer"
  30. },
  31. "commentCount": {
  32. "type": "integer"
  33. },
  34. "skuImgUrl": {
  35. "type": "keyword",
  36. "index": false
  37. },
  38. "createTime": {
  39. "type": "date",
  40. "format": "yyyy-MM-dd HH:mm:ss"
  41. },
  42. "updateTime": {
  43. "type": "date",
  44. "format": "yyyy-MM-dd HH:mm:ss"
  45. }
  46. }
  47. }
  48. }

ik_max_word

会尽可能把一个次拆分成多的各种分词组合。
比如中华人民共和国,会拆成:中华、华人、人民、中华人民、人民共和国、共和国、中华人民共和国

ik_smart

拆的粒度比较粗。
比如中华人民共和国,会拆成:中华、人民、共和国

一般我们在写入数据的时候使用 ik_max_word,建立非常精细的各种小词。对字段搜索时,一般使用 ik_smart,这样搜索的结果更加匹配。

suggest 建模

  1. PUT /career_plan_sku_suggest_15
  2. {
  3. "settings": {
  4. "number_of_shards": 3,
  5. "number_of_replicas": 1,
  6. "analysis": {
  7. "analyzer": {
  8. "ik_and_pinyin_analyzer": {
  9. "type": "custom",
  10. "tokenizer": "ik_smart",
  11. "filter": "my_pinyin"
  12. }
  13. },
  14. "filter": {
  15. "my_pinyin": {
  16. "type": "pinyin",
  17. "keep_first_letter": true,
  18. "keep_full_pinyin": true,
  19. "keep_original": true,
  20. "remove_duplicated_term": true
  21. }
  22. }
  23. }
  24. },
  25. "mappings": {
  26. "properties": {
  27. "word1": {
  28. "type": "completion",
  29. "analyzer": "ik_and_pinyin_analyzer"
  30. },
  31. "word2": {
  32. "type": "text"
  33. }
  34. }
  35. }
  36. }