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

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

posted @ 2018-03-10 21:27  outback123  阅读(295)  评论(0编辑  收藏  举报