gpt4 book ai didi

elasticsearch - 使用数千个字段设计选项进行映射

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

我正在尝试为具有标签和值的通用“术语”列表设计一个映射:

terms = [
{ label: "Start Date", value: "2017/12/11" }, <- this is a date
{ label: "End Date", value: "2027/12/11" },
{ label: "Owner", value: "Monsters INC." }, <- this is text
{ label: "Fees", value: "1000$" } <- this is a numeric field
]

虽然所有文档都将共享几个公共(public)字段,但我有几个不同的文档模板,用户将能够将自定义术语添加到具有不同数据类型的列表中。

我需要使用一些 bool 逻辑查询文档,例如“获取开始日期为去年且费用低于 1000 美元且所有者为“monster INC”的文档。

我有一个相当大的术语列表(数千个),用户可以添加更多的术语或由开发团队添加。

对于这个问题,我探索了两种解决方案:

存储为嵌套对象:

映射如下所示:
"terms":

{
"type": "nested",
"properties": {
"label": { "type": "string" },
"value": { "type": "string" },
"source": { "type": "string" },
"page": { "type": "string" }
}
}

优点:添加新术语时无需重新制作索引,映射更小

缺点:

查询更难,因为我们需要检查标签与值的关系。

由于所有值都是字符串,因此无法使用 lt, gt

可能使用强制转换来实现 lt, gt 但它似乎很慢(违背了 ES 的目的)

创建大映射:

只需使用每个可能的术语创建一个大对象:
{
"Start Date": { "type": "date" },
"End Date": { "type": "date" },
"Owner": { "type": "text" },
"Fees": { "type": "integer" },
... add as many terms as needed
}

优点:查询变得简单,可以做 gt、lt,可以对每个字段应用任何需要的优化(如精确字段、关键字字段等)

缺点:ES 不推荐使用大的 esparce 映射,因为每个文档都共享相同的底层数据结构。

保持更新术语列表的更多工作

如果数据类型不同,同名术语可能会发生冲突

ES 提供的这种模式有什么解决方案吗?
任何帮助表示赞赏。

我们目前正在使用 ES 5.5
术语词典中目前有 1400 个术语

最佳答案

假设您知道术语的类型,并且在索引和搜索时,您可以对名称中的值类型进行编码,并使用带有模式匹配的动态模板。您只需要将标签(“开始日期”)投影到具有编码类型(“start_date_date”)的属性名称,并将标签作为字符串和动态类型的值写入其中,这样您就可以映射匹配的所有内容模式( *_date )到某些特定类型

编辑:
Dynamic templates是 Elasticsearch 的一部分。有了这个,您可以为映射定义一个模板,例如字段名称与特定模式匹配。

{"terms: {
"dynamic_templates": [
"date_term": {
"match_mapping_type": "string",
"match": "*_date",
"mapping": {
"type": "date"
}
},
"numeric_term": {
"match_mapping_type": "string",
"match": "*_number",
"mapping": {
"type": "long"
}
}
]
}}

该片段将使用 date输入 start_date_datelong对于 start_date_number如果您在两种情况下都将值作为字符串提供(这就是 match_mapping_type 的用途)。如果您将它作为 double 提供,Elasticsearch 自己的动态映射(如果启用)已经将其映射到 double 。

关于elasticsearch - 使用数千个字段设计选项进行映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47760474/

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