全文检索

准备

使用全文检索前先安装elasticsearch插件。

配置

进入 后台——模块管理——CMS配置搜索选项卡引擎选项切换到Elasticsearch,填写索引名称,比如cms
进入后台——模块管理,打开Elasticsearch配置页,填写Hosts(如:127.0.0.1:9200)。
进入后台——Elasticsearch全文检索,添加一项配置,如(索引必须于配置中的索引一致)
图片标注
Mapping示例:

  1. {
  2. "properties": {
  3. "id": { "type": "integer" },
  4. "title": { "type": "text", "analyzer": "ik_max_word" },
  5. "description": { "type": "text", "analyzer": "ik_max_word" },
  6. "url": { "type": "keyword" },
  7. "type": { "type": "keyword" },
  8. "group": { "type": "keyword" },
  9. "group_name": { "type": "keyword" },
  10. "keywords": { "type": "text", "analyzer": "ik_max_word" },
  11. "content": { "type": "text", "analyzer": "ik_max_word" },
  12. "views": { "type": "long" },
  13. "image": { "type": "keyword" },
  14. "author": { "type": "keyword" },
  15. "author_avatar": { "type": "keyword" },
  16. "created_at": { "type": "integer" }
  17. }
  18. }

Query示例

  1. {
  2. "query": {
  3. "bool": {
  4. "must": [
  5. {
  6. "multi_match": {
  7. "query": "{$payload->params['keyword']}",
  8. "fields": [
  9. "title",
  10. "description",
  11. "content"
  12. ]
  13. }
  14. }
  15. {if !empty($payload->params['type'])},{
  16. "match": {
  17. "type": "{$payload->params['type']}"
  18. }
  19. }{/if}
  20. ]
  21. }
  22. },
  23. "highlight": {
  24. "fields": {
  25. "title": {
  26. "pre_tags": "<span class='text-danger text-bold'>",
  27. "post_tags": "</span>"
  28. },
  29. "description": {
  30. "pre_tags": "<span class='text-danger text-bold'>",
  31. "post_tags": "</span>"
  32. }
  33. }
  34. }
  35. }

最后初始化数据即可。