Leo*_*Leo 4 navigation aggregate e-commerce elasticsearch
在过去的几天里,我读了很多书,但找不到适合我的解决方案。还看到了一些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"
}
}
}
}
},
...
Run Code Online (Sandbox Code Playgroud)
在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"
],
...
}
}
]
Run Code Online (Sandbox Code Playgroud)
现在我不知道我是否必须使用Path Hierarchy tokenizer某种方式、nested类型、两者的组合或 ES 提供的任何东西。那么是否有可能进行例如术语聚合category_tags并获得“有用”的结果?
有用的是数据是结构化的,因此我可以将其用于基于电子商务的(树状)导航。这样用户就可以点击导航树,(每次点击时,我都会向 ES 发送一个请求以对其进行过滤),然后根据点击的内容显示结果。
小智 6
我在这个问题上找到了几篇很棒的文章(这里和这里),并且还做了一些实验。虽然这两篇文章引用了旧版本,但一些调整使 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
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您的聚合请求将如下所示:
{
"aggs": {
"category": {
"terms": {
"field": "category_path"
}
}
},
"size": 0
}
Run Code Online (Sandbox Code Playgroud)
你的结果:
"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
}
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1590 次 |
| 最近记录: |