作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是ElasticSearch的新手,我有一棵树,它描述了某个文档的路径(不是真实的文件系统路径,只是将文章,图像和文档归类为一个简单的文本字段)。每个路径条目都有一个类型,例如:Group Name
,Assembly name
甚至Unknown
。例如,可以在查询中使用这些类型以跳过路径中的某些条目。
我的源数据存储在SQL Server中,该架构如下所示:
通过将Tree.Id
连接到Tree.ParentId
来构建树,但是每个节点必须具有一个类型。文档连接到树中的叶子。
我不担心在SQL Server中查询结构,但是我应该找到一种最佳方法来对非规范化并在Elastic中搜索它们。如果我弄平路径并列出文档的“描述符”列表,则可以将每个“文档”条目存储为 flex 文档。
{
"path": "NodeNameRoot/NodeNameLevel_1/NodeNameLevel_2/NodeNameLevel_3/NodeNameLevel_4",
"descriptors": [
{
"name": "NodeNameRoot",
"type": "type1"
},
{
"name": "NodeNameLevel_1",
"type": "type1"
},
{
"name": "NodeNameLevel_2",
"type": "type2"
},
{
"name": "NodeNameLevel_3",
"type": "type2"
},
{
"name": "NodeNameLevel_4",
"type": "type3"
}
],
"document": {
...
}
}
X
?
curl -X PUT \
http://localhost:9200/test \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d '{
"mappings": {
"path": {
"properties": {
"names": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
},
"tokens": {
"type": "text",
"analyzer": "pathname_analyzer"
},
"depth": {
"type": "token_count",
"analyzer": "pathname_analyzer"
}
}
},
"types": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
},
"tokens": {
"type": "text",
"analyzer": "pathname_analyzer"
}
}
}
}
}
},
"settings": {
"analysis": {
"analyzer": {
"pathname_analyzer": {
"type": "pattern",
"pattern": "#->>",
"lowercase": true
}
}
}
}
}'
curl -X POST \
http://localhost:9200/test/path/_search \
-H 'content-type: application/json' \
-d '{
"query": {
"bool": {
"should": [
{"match": { "names.depth": 5 }}
]
}
}
}'
最佳答案
首先,您应该确定所有查询模式,以设计如何索引数据。
从您给出的示例中,我将为以下格式的文档建立索引:
{
"path": "NodeNameRoot/NodeNameLevel_1/NodeNameLevel_2/NodeNameLevel_3/NodeNameLevel_4",
"types: "type1/type1/type2/type2/type3",
"document": {
...
}
}
path
:text
类型+基于pattern analyzer的分析器来分割/
字符token_count
类型+同一个分析器来计算路径深度。创建一个multi field(path.depth
)types
text
类型+基于pattern analyzer的分析器来分割/
字符path
和
types
字段以及,使用a或a
match_phrase
字段types
查询
match
字段path
查询
term
子字段path.depth
查询
关于elasticsearch - 如何在ElasticSearch中反规范化层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46790343/
我是一名优秀的程序员,十分优秀!