我在过去几天里经常阅读,但无法找到适合我的解决方案。还看到了string
类型正在使用的一些内容,这在我使用的ES版本中已弃用。
我在Elasticsearch上: 5.6.4
我已将某些文档编入索引,并使用该映射并尝试使用analyzers
(path_hierarchy tokenizer
),查看Ingest Node
但似乎没有任何内容适用于我。
它与category_tags字段有关(参见底部的示例)。我有可能按照自己喜欢的方式对其进行重组,如果有必要,我会生成这些数据。
我想要一个典型的电子商务导航,所以我认为这应该通过category_tags上的聚合来实现?我创建了一个数组来显示一个文档可以有多个类别, 每个层次结构可以任意深入。我认为它不会超过4或5级,但可能会发生。
我的动态模板如下:
...
"analyzer": {
"my_path_hierarchy_analyzer": {
"type": "custom",
"tokenizer": "my_path_hierarchy_tokenizer"
},
"my_pipe_analyzer": {
"type": "custom",
"tokenizer": "my_pipe_tokenizer"
}
},
"tokenizer": {
"my_path_hierarchy_tokenizer": {
"type": "path_hierarchy",
"delimiter": "|"
},
"my_pipe_tokenizer": {
"type": "pattern",
"pattern": "|"
}
}
}
},
"mappings": {
"item": {
"dynamic_templates": [
{
"category_tags_analyzed": {
"match": "category_tags",
"mapping": {
"type": "text",
"analyzer": "my_path_hierarchy_analyzer",
"fields": {
"textsearch": {
"type": "text",
"analyzer": "my_pipe_analyzer"
}
}
}
}
},
...
在text
类型字段上执行aggs时,由于fielddata
而引发错误。此外,我认为无论如何我都不应该将它设置为true
。在keyword
类型字段上,它甚至没有索引文档,因此会抛出错误。所以我猜不出来。
文件看起来像是:
"hits": [
{
"_index" : "my_index",
"_type" : "my_type",
"_id" : "1",
"_score" : 1.0,
"_source" : {
...,
"category_tags" : [
"Men|Tops|Shirts",
"Men|Sale",
"Men|Whatever"
],
...
}
}
]
现在我不知道我是否必须以某种方式使用Path Hierarchy tokenizer
,nested
类型,两者的组合或ES提供的任何内容。
所以甚至可以做到例如category_tags
上的字词汇总,并获得"有用的"导致?
有用的是数据是结构化的,所以我可以将它用于基于电子商务(树状)的导航。 这样用户就可以点击导航树,(在每次点击时,我都会向ES发送请求以对其进行过滤),并根据点击的内容显示结果。
答案 0 :(得分:2)
我在这个问题上发现了几篇很棒的文章(here和here),并且还进行了一些实验。虽然这两篇文章引用了旧版本,但是有一些调整可以解决ES 6的问题。
这对我有用,我没有测试每个项目的多个类别(例如你的数组示例),但它可能仍然有效:
{
"settings": {
"analysis": {
"analyzer": {
"path-analyzer": {
"tokenizer": "path-tokenizer"
}
},
"tokenizer": {
"path-tokenizer": {
"type": "path_hierarchy",
"delimiter": "|"
}
}
}
},
"mappings": {
"item": {
"dynamic": "strict",
"properties": {
"category_path": {
"type": "text",
"analyzer": "path-analyzer",
"search_analyzer": "keyword",
"fielddata": true
}
}
}
}
}
您的聚合请求看起来像这样:
{
"aggs": {
"category": {
"terms": {
"field": "category_path"
}
}
},
"size": 0
}
结果:
"buckets": [
{
"key": "Men",
"doc_count": 11
},
{
"key": "Men|Sale",
"doc_count": 4
},
{
"key": "Men|Tops",
"doc_count": 3
},
{
"key": "Men|Tops|Shirts",
"doc_count": 2
}
]