gpt4 book ai didi

elasticsearch - Elasticsearch奇怪的过滤器行为

转载 作者:行者123 更新时间:2023-12-02 22:32:34 25 4
gpt4 key购买 nike

我正在尝试替换字段中的特定字符串。因此,正如the docs中所述,我使用了自定义分析器和字符过滤器,但是没有用。
这是我的索引设置:

{
"settings": {
"analysis": {
"char_filter": {
"doule_colon_to_space": {
"type": "mapping",
"mappings": [ "::=> "]
}},
"analyzer": {
"my_analyzer": {
"type": "custom",
"char_filter": [ "doule_colon_to_space" ],
"tokenizer": "standard"
}}
}}}

应该用空格替换字段中的所有双冒号(::)。然后,我更新映射以使用分析器:
{
"posts": {
"properties": {
"id": {
"type": "long"
},
"title": {
"type": "string",
"analyzer": "my_analyzer",
"fields": {
"simple": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}

然后我将文档放入索引:
{
"id": 1,
"title": "Person::Bruce Wayne"
}

然后,我测试分析器是否正常工作,但似乎不起作用-当我发送此 https://localhost:/first_test/_analyze?analyzer=my_analyzer&text=Person::Someone+Close时,我又收到了两个 token -“PersonSomeone”(一起)和“Close”。我这样做对吗?也许我应该以某种方式逃离太空?我使用Elasticsearch 1.3.4

最佳答案

我认为char_filter模式中的空格被忽略了。尝试对单个空格使用Unicode转义序列:

"mappings": [ "::=>\\u0020"]

更新:

根据您的评论,简短的回答是肯定的,这个例子是错误的。该文档确实建议您可以使用映射字符过滤器将 token 替换为另一个由空格填充的 token ,但 the code表示不同意。

MappingCharFilterFactory的源代码使用此正则表达式来解析设置:
// source => target
private static Pattern rulePattern = Pattern.compile("(.*)\\s*=>\\s*(.*)\\s*$");

此正则表达式匹配(并有效地丢弃)第二个替换 token ( \\s*)周围的任何空格( (.*)),因此似乎您不能将前导或尾随空格用作替换映射的一部分(尽管它可能包括非页内空白)。即使正则表达式不同,匹配的 token 也会被 trim() ed删除,这将删除所有前导和尾随空格。

关于elasticsearch - Elasticsearch奇怪的过滤器行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31704691/

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