1. 程式人生 > >63.文件系統進行數據建模以及文件搜索

63.文件系統進行數據建模以及文件搜索

什麽 ping blog key 搜索結果 ons arch 程序 workspace

主要知識點:

  • 對類似文件系統這種的有多層級關系的數據進行建模
  • 對上述模型數據進行搜索

一、文件系統數據構造

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

在本例中,上述兩次搜索結果是一樣的。

63.文件系統進行數據建模以及文件搜索