63.文件系統進行數據建模以及文件搜索
主要知識點:
- 對類似文件系統這種的有多層級關系的數據進行建模
- 對上述模型數據進行搜索
一、文件系統數據構造
1、新建index,並自定義analyzer
新建一個index,自定義一個名為paths的analyzer,這個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、新建type的mapping
新建一個名為file的type,其中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和插入的數據可以不一一對應,本例中新建索引時沒有建
二、對文件系統執行搜索
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.文件系統進行數據建模以及文件搜索