对于我的分析访问日志的项目,我需要使Path Hierarchy Tokenizer工作。事实是,分析器本身似乎运行良好,只是不能与我的索引数据一起使用。 我觉得映射有些问题。
注意:我正在使用的Elasticsearch版本是5.6。升级不是一种选择。我犯了一个错误,即使用了v.5.6中尚不可用的某些语法,因此我有可能语法有问题。不过,我无法发现自己的错误。
这是我的自定义模板的一部分:
{
"template": "beam-*"
"order" : 20,
"settings": {
"number_of_shards": 1,
"analysis": {
"analyzer": {
"custom_path_tree": {
"tokenizer": "custom_hierarchy"
},
"custom_path_tree_reversed": {
"tokenizer": "custom_hierarchy_reversed"
}
},
"tokenizer": {
"custom_hierarchy": {
"type": "path_hierarchy",
"delimiter": "/"
},
"custom_hierarchy_reversed": {
"type": "path_hierarchy",
"delimiter": "/",
"reverse": "true"
}
}
}
},
这是映射。对象字段包含路径。我希望能够搜索object.tree和object.tree_reversed以标识在线商店中访问量最大的类别。
"mappings": {
"logs": {
"properties": {
"object": {
"type": "text",
"fields": {
"tree": {
"type": "text",
"analyzer": "custom_path_tree"
},
"tree_reversed": {
"type": "text",
"analyzer": "custom_path_tree_reversed"
}
}
},
当我尝试这个
POST beam-2019.07.02/_analyze
{
"analyzer": "custom_path_tree",
"text": "/belletristik/science-fiction/postapokalypse"
}
我明白了
{
"tokens": [
{
"token": "/belletristik",
"start_offset": 0,
"end_offset": 13,
"type": "word",
"position": 0
},
{
"token": "/belletristik/science-fiction",
"start_offset": 0,
"end_offset": 29,
"type": "word",
"position": 0
},
{
"token": "/belletristik/science-fiction/postapokalypse",
"start_offset": 0,
"end_offset": 44,
"type": "word",
"position": 0
}
]
}
分析仪本身似乎工作正常,并且正在执行应做的事情。
当我尝试建立查询时
GET beam-2019.07.03/_search
{
"query": {
"term": {
"object.tree": "/belletristik/"
}
}
}
我没有结果,尽管应该有几百个。
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
也许我的查询是错误的。还是映射的总和不合算?
答案 0 :(得分:0)
查询一词在查询时将不会对输入字符串应用分析器,因此它会尝试匹配movl $0, %eax
。如果您注意到分析器的输出,则由它生成的令牌为/belletristik/
。生成的令牌的末尾没有斜杠/belletristik
。因此,输入项与任何文档都不匹配。
按如下所示修改查询:
/
如果您不想更改查询的输入项,也可以使用match query。由于匹配也会将分析器应用于GET beam-2019.07.03/_search
{
"query": {
"term": {
"object.tree": "/belletristik"
}
}
}
。因此,这将尝试匹配/belletristik/
(分析程序在/belletristik
上进行匹配查询时由分析器生成的令牌),从而将匹配文档。
/belletristik/