gpt4 book ai didi

lucene - Elasticsearch 分析仪

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

我想在elasticsearch中指定每个字段分析器。对于某些字段,我需要关键字分析器,而对于一个字段,我需要一个自定义数字分析器,它将删除所有非数字字符(请参见下面的代码中的number_analyzer)

创建索引的请求是

{
"settings": {
"analysis" : {
"analyzer" : {
"number_analyzer" : {
"type": "custom",
"tokenizer": "keyword",
"filter": ["lowercase"],
"char_filter": ["number_filter"]
}
},
"char_filter" : {
"number_filter" : {
"type": "pattern_replace",
"pattern": "[\\d]+",
"replacement": ""
}
}
}
}
}

字段的映射为
{
"properties": {
"field1": {
"type": "string",
"store": "yes",
"index": "analyzed",
"analyzer": "number_analyzer"
},
"field2": {
"type": "string",
"store": "yes",
"index": "not_analyzed",
"analyzer": "keyword"
},
"field3": {
"type": "string",
"store": "true",
"index": "not_analyzed"
},
"field4": {
"type": "string",
"store": "yes",
"index": "analyzed"
},
"field5": {
"type": "string",
"store": "yes",
"index": "analyzed",
"analyzer": "number_analyzer"
}
}
}

当我在索引中插入以下文档时
{
"field1" : "464533AB",
"field2" : "Euro",
"field3" : "THIS IS A TITLE",
"field4": "DEED_TYPE",
"field5":"TEST3"
}

我注意到字段1中的字符没有被删除(我的目标是仅保留 464533),而且我能够获得查询 field4:DEED_TYPE的结果,尽管我不应该这样做(我认为标准分析器将删除特殊字符并执行小写字母,因此我希望 field4:DEED_TYPE仅可与关键字分析器一起使用)。

上面的代码中指定分析仪的方式是否存在错误?

最佳答案

通常,在查询时将应用与在索引时所应用的分析规则相同的分析规则。因此,当您搜索:

field4:"DEED_TYPE"

该查询将被分析,并变为:
field4:"deed type"

同样,分析不会影响字段的存储版本,我相信这就是您在field1中所指的内容。字段的存储版本,即从索引中检索的版本,作为搜索结果。因此,即使在分析中删除了字母,这也只会反射(reflect)在您如何搜索数据中。如果要更改存储的字段表示形式,则应在进行Lucene分析之前进行预处理。分析仪通常不是用于此目的的工具。

但是,您的number_filter是错误的,您将其倒退了。应该:
"number_filter" : {
"type": "pattern_replace",
"pattern": "[^\\d]+",
"replacement": ""
}
[\\d]+匹配所有数字。根据您的描述,您想删除除数字以外的所有内容,因此 [^\\d]+

关于lucene - Elasticsearch 分析仪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24331176/

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