gpt4 book ai didi

elasticsearch - ElasticSearch中的路径层次结构标记器无法正常工作

转载 作者:行者123 更新时间:2023-12-02 23:51:51 26 4
gpt4 key购买 nike

对于分析访问日志的项目,我需要使“路径层次标记器”起作用。问题是分析仪本身似乎运行良好,只是不能与我的索引数据一起使用。
我感觉映射可能有问题。

注意:我正在使用的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": []
}
}

也许我的查询是错误的。或与映射的东西不累加?

最佳答案

查询一词在查询时不会对输入字符串应用分析器,因此它尝试匹配/belletristik/。如果您注意到分析器的输出,则它生成的 token 为/belletristik。生成的 token 的末尾没有斜杠/。因此,输入项与任何文档都不匹配。

修改查询,如下所示:

GET beam-2019.07.03/_search
{
"query": {
"term": {
"object.tree": "/belletristik"
}
}
}

如果您不想更改查询的输入项,也可以使用 match query代替。由于匹配也会将分析器应用于 /belletristik/。因此,这将尝试匹配 /belletristik(由 /belletristik/上的match查询应用分析器时生成的 token ),因此将匹配文档。
GET beam-2019.07.03/_search
{
"query": {
"match": {
"object.tree": "/belletristik/"
}
}
}

关于elasticsearch - ElasticSearch中的路径层次结构标记器无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57023299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com