gpt4 book ai didi

elasticsearch - 始终具有和不具有空格的Elasticsearch索引测量单位

转载 作者:行者123 更新时间:2023-12-03 02:14:09 25 4
gpt4 key购买 nike

因此,无论数字和单位之间是否存在空格,我都希望始终为度量单位编制索引。
我使用pattern_capture过滤器完成了此操作:

GET /_analyze
{
"char_filter": [
{
"pattern": "(\\d+)\\s*(cm|m|in)",
"type": "pattern_replace",
"replacement": "$1_$2"
}
],
"text": ["10cm", "10 cm"]
}
哪个产生我的期望:
{
"tokens" : [
{
"token" : "10_cm",
"start_offset" : 0,
"end_offset" : 4,
"type" : "word",
"position" : 0
},
{
"token" : "10_cm",
"start_offset" : 5,
"end_offset" : 10,
"type" : "word",
"position" : 101
}
]
}
虽然这可行,但我不确定模式捕获性能。 Elasticsearch文档中到处都有Regex警告,我有点担心它会严重影响性能。
也许有更好的方法可以更一致地分析此类单位?

最佳答案

您应该在Elasticsearch中谨慎对待性能和正则表达式。
您可以在摄取时使用简单的正则表达式。但这取决于您的实现。
主要风险是在索引过程循环内引入另一个或几个其他循环。
因此,在大文本字段上这非常危险。
但是它不应该在您的用例上保持不变。
首先,您应该标记正则表达式以避免循环,即使用户发送了错误的数据(10cm 20cm 14cm等...。而不是字段中的一个值都可能有问题),如果在用例中可能的话,请添加^正则表达式

GET /_analyze
{
"char_filter": [
{
"pattern": "^(\\d+)\\s*(cm|m|in)$",
"type": "pattern_replace",
"replacement": "$1_$2"
}
],
"text": ["10cm", "10 cm", "a10cm", "10 cm3"]
}
最后2个示例将被忽略。
{
"tokens" : [
{
"token" : "10_cm",
"start_offset" : 0,
"end_offset" : 4,
"type" : "word",
"position" : 0
},
{
"token" : "10_cm",
"start_offset" : 5,
"end_offset" : 10,
"type" : "word",
"position" : 101
},
{
"token" : "a10cm",
"start_offset" : 11,
"end_offset" : 16,
"type" : "word",
"position" : 202
},
{
"token" : "10 cm3",
"start_offset" : 17,
"end_offset" : 23,
"type" : "word",
"position" : 303
}
]
}
但是,真正衡量集群中此更改影响的唯一方法是对其进行测试。
您可以创建自己的基准,也可以使用 Rally并定义一个Race以测试大量数据。

关于elasticsearch - 始终具有和不具有空格的Elasticsearch索引测量单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63951009/

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