美文网首页java从0到架构师
63_数据建模实战_对文件系统进行数据建模以及文件搜索实战

63_数据建模实战_对文件系统进行数据建模以及文件搜索实战

作者: 小山居 | 来源:发表于2020-02-29 22:33 被阅读0次

    63_数据建模实战_对文件系统进行数据建模以及文件搜索实战

    数据建模,对类似文件系统这种的有多层级关系的数据进行建模

    1、文件系统数据构造

    先建立映射,自定义分词器为paths

    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

    建立file的mapping

    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"
                  }
                }
              }
            }
          ]
        }
      }
    }
    
    

    搜索结果如下

    {
    "took": 2,
    "timed_out": false,
    "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
    },
    "hits": {
    "total": 1,
    "max_score": 1.284885,
    "hits": [
    {
    "_index": "fs",
    "_type": "file",
    "_id": "1",
    "_score": 1.284885,
    "_source": {
    "name": "README.txt",
    "path": "/workspace/projects/helloworld",
    "contents": "这是我的第一个elasticsearch程序"
    }
    }
    ]
    }
    }

    搜索需求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"
                  }
                }
              }
            }
          ]
        }
      }
    }
    
    

    相关文章

      网友评论

        本文标题:63_数据建模实战_对文件系统进行数据建模以及文件搜索实战

        本文链接:https://www.haomeiwen.com/subject/culwhhtx.html