数据建模,对类似文件系统这种的有多层级关系的数据进行建模
1、文件系统数据构造
PUT /fs { "settings": { "analysis": { "analyzer": { "paths": { "tokenizer": "path_hierarchy" } } } } }
path_hierarchy tokenizer讲解
/a/b/c/d --> path_hierarchy -> /a/b/c/d, /a/b/c, /a/b, /a
fs: filesystem
PUT /fs/_mapping/file { "properties": { "name": { "type": "keyword" }, "path": { "type": "keyword", "fields": { "tree": { "type": "text", "analyzer": "paths" } } } } } PUT /fs/file/1 { "name": "README.txt", "path": "/workspace/projects/helloworld", "contents": "这是我的第一个elasticsearch程序" }
2、对文件系统执行搜索
文件搜索需求:查找一份,内容包括elasticsearch,在/workspace/projects/hellworld这个目录下的文件
GET /fs/file/_search { "query": { "bool": { "must": [ { "match": { "contents": "elasticsearch" } }, { "constant_score": { "filter": { "term": { "path": "/workspace/projects/helloworld" } } } } ] } } }
搜索需求2:搜索/workspace目录下,内容包含elasticsearch的所有的文件
/workspace/projects/helloworld doc1
/workspace/projects doc1
/workspace doc1
GET /fs/file/_search { "query": { "bool": { "must": [ { "match": { "contents": "elasticsearch" } }, { "constant_score": { "filter": { "term": { "path.tree": "/workspace" } } } } ] } } }
结果:
1. { 2. "took": 2, 3. "timed_out": false, 4. "_shards": { 5. "total": 5, 6. "successful": 5, 7. "failed": 0 8. }, 9. "hits": { 10. "total": 1, 11. "max_score": 1.284885, 12. "hits": [ 13. { 14. "_index": "fs", 15. "_type": "file", 16. "_id": "1", 17. "_score": 1.284885, 18. "_source": { 19. "name": "README.txt", 20. "path": "/workspace/projects/helloworld", 21. "contents": "这是我的第一个elasticsearch程序" 22. } 23. } 24. ] 25. } 26. }