gpt4 book ai didi

elasticsearch - 有效处理字符串和字符串数组对

转载 作者:行者123 更新时间:2023-12-03 01:57:24 25 4
gpt4 key购买 nike

我通过以下方式在ES中保存了TB的数据:

"class" : 
{
"type": "nested",
"properties": {
"name": {"type": "string"},
"methods": [ {
"name": {"type": "string"}
} ]
}

简而言之,我将数据另存为(class1,[method1,method2,...]),(class2,[method3,method4,...])...

我在ES文档中看到,所有数据都以lucene键值对的形式减少,不确定在这里是否有意义。

如果我按以下方式安排数据,它将减少搜索延迟:
{class1,method1},{class1,method2},.... {class2,method3}...。

示例查询:搜索给定的类名和方法名对,并在索引中显示所有具有该对名的文档。

感谢任何帮助。如果有更好的处理方法,请提出建议。

最佳答案

在您的两个选项之间(即,每个类一个嵌套的文档与每个类和方法对的一个嵌套文档),搜索时间应该不会有明显的差异。就个人而言,我更喜欢第一种选择,因为这似乎是您数据的更好模型。此外,这意味着总共需要更少的文件。 (请记住,ES中的“嵌套”文档实际上只是Lucene背后的另一个真实文档。ES只是管理嵌套文档直接位于父文档旁边,以进行有效的关系管理)

在内部,ES将每个值都视为一个数组,因此它当然适合处理第一个选项。假设这样的映射示例:

PUT /my_index/
{
"mappings": {
"my_type": {
"properties": {
"someField": { "type": "string" },
"classes": {
"type": "nested",
"properties": {
"class": { "type":"string", "index":"not_analyzed" },
"method": { "type": "string", "index":"not_analyzed" }
}
}
}
}
}
}

然后,您可以输入您的文档,例如:
POST test_index/my_type
{
"someField":"A",
"classes": {
"class":"Java.lang.class1",
"method":["myMethod1","myMethod2"]
}
}

POST test_index/my_type
{
"someField":"B",
"classes": {
"class":"Java.lang.class2",
"method":["myMethod3","myMethod4"]
}
}

为了满足您的示例查询,您可以简单地在 bool查询中使用 nested过滤器。例如:
GET test_index/my_type/_search
{
"query": {
"nested": {
"path": "classes",
"query": {
"bool": {
"filter": [
{ "term": {"classes.class":"Java.lang.class2"} },
{ "term": {"classes.method":"myMethod3"} }
]
}
}
}
}
}

这将返回我的示例中的第二个文档。

关于elasticsearch - 有效处理字符串和字符串数组对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35529888/

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