• 63.文件系统进行数据建模以及文件搜索


    主要知识点:

    • 对类似文件系统这种的有多层级关系的数据进行建模
    • 对上述模型数据进行搜索

       

    一、文件系统数据构造

       

    1、新建index,并自定义analyzer

    新建一个index,自定义一个名为pathsanalyzer,这个analyzer所用的分词器是path_hierarchy。语法:

       

    PUT /fs

    {

    "settings": {

    "analysis": {

    "analyzer": {

    "paths": {

    "tokenizer": "path_hierarchy"

    }

    }

    }

    }

    }

       

    2、查看分词器:

    GET /fs/_analyze

    {

    "text":"/a/b/c/d",

    "analyzer": "paths"

     

    }

    path_hierarchy tokenizer会把/a/b/c/d这样一个路径分成 /a/b/c/d, /a/b/c, /a/b, /a 这四个路径

       

    3、新建typemapping

    新建一个名为filetype,其中path所用的分词器是paths

       

    PUT /fs/_mapping/file

    {

    "properties": {

    "name": { "type": "keyword"},

    "path": { "type": "keyword",

    "fields": {"tree": { "type": "text","analyzer": "paths"}}

    }

    }

    }

       

    4、插入数据

       

    PUT /fs/file/1

    {

    "name": "README.txt",

    "path": "/workspace/projects/helloworld",

    "contents": "这是我的第一个elasticsearch程序"

    }

    从这里也可以看出,新建的mapping和插入的数据可以不一一对应,本例中新建索引时没有建contentsmappings,但是在插入数据时插入了这个数据也不会报错。

       

    二、对文件系统执行搜索

       

    1、在特定目录下查找特定文件

    文件搜索需求:查找一份,内容包括elasticsearch,在/workspace/projects/hellworld这个目录下的文件

       

    GET /fs/file/_search

    {

    "query": {

    "bool": {

    "must": [{"match": {"contents": "elasticsearch"}},

    {"constant_score": {"filter": {"term": {"path": "/workspace/projects/helloworld"}}}} ]

    }

    }

    }

    执行结果:

       

    "hits": [

    {

    "_index": "fs",

    "_type": "file",

    "_id": "1",

    "_score": 1.284885,

    "_source": {

    "name": "README.txt",

    "path": "/workspace/projects/helloworld",

    "contents": "这是我的第一个elasticsearch程序"

    }

    }

    ]

    }

    }

       

    2、在指定目录下查找包含特定名称的所有的文件

    搜索需求2:搜索/workspace目录下,内容包含elasticsearch的所有的文件

       

    GET /fs/file/_search

    {

    "query": {

    "bool": {

    "must": [{"match": {"contents": "elasticsearch"}},

    {"constant_score": {"filter": {"term": {"path.tree": "/workspace"}}}}]

    }

    }

    }

    为什么是path.tree

    在本例中,上述两次搜索结果是一样的。

  • 相关阅读:
    position之属性
    Grid网格布局
    position 属性指定了元素的定位类型
    注册表单
    简单页面
    自我介绍
    正则表达式
    Dom和Bom
    颜色和单位
    伪类和伪元素的区别
  • 原文地址:https://www.cnblogs.com/liuqianli/p/8542127.html
Copyright © 2020-2023  润新知