我知道在elasticsearch中没有连接索引的选项,但我需要找到一种方法来解决这个问题:
我有两个索引,比如A,B
IndexA的信息像field d1、field d2、field d3
IndexB有field d4、field d5、field d6
如果我将按查询字段5(在本例中为“test”)进行搜索,我希望树中的所有关系如下:
匹配IndexA中与“field2”(来自IndexA)和IndexB中的“field5”(来自IndexB)匹配的所有文档,例如,IndexA文档:
5、“test”、“test2”、“test”、“test7”、“test11”、“test10”、“test11”
IndexB文档:
1,“test”,(...)
2,“test”,(...)
3,“test100”,(...)
示例响应:
对于id5(来自indexA),我希望有一个来自indexB的id为1和2的对象,例如{id: 5,响应:{1,2}}
对于id10(来自IndexA),我希望有一个来自indexB的id为1和2的对象,例如{id: 10,响应:{1,2}}
对于id11没有匹配(“test10" ! = "测试”)
{id: 11,响应:{}}
有没有办法解决这个问题?最后,我需要对四个索引执行此操作(但如果两个索引之间有可能,那么我也可以对4执行此操作)。
I was tring as bellow:
GET /_msearch
{
"_index": [
"index1",
"index2",
"index3"
]
}
{
"query": {
"bool": {
"should": [
{
"match": {
"index3id": "1" // it is in the 3th index so i have responses from 3th index
} // only
}
]
}
},
"size": 100,
"aggregations": {
"firstLevel": {
"top_hits": {
"size": 100,
"_source": {
"includes": "index3id"
}
}
}
}
}
response of aggregation here:
"aggregations": {
"firstLevel": {
"hits": {
"total": 2,
"max_score": 1,
"hits": [
{
"_index": "index3",
"_type": "someTypeNotRelevant",
"_id": "81",
"_score": 1,
"_source": {
"index3id": 1
}
},
{
"_index": "index3",
"_type": "someTypeNotRelevant",
"_id": "61",
"_score": 1,
"_source": {
"index3id": 1
}
}
]
}
}
}
Now I just want to do a new query in index2 for some field but with values which were in
_source(in this case - for the all index3id's) (i was thinking about some sub-aggregation to firstLevel": {} aggregation - but with use of new query to index2).
There are 2 problems:
1. How to pass these index3id's?
2. After first query, I have only "data" from index3 because of using index3id
Anyway thank you for advice.
我认为这在elasticsearch中是不可能的,就像你说的。你不应该创建具有这样关系的索引。最好重新考虑你的模型并对数据进行非规范化。
为了解决这个问题,您必须在后端以编程方式进行处理。伪代码:
//Get all objects from indexA
const allIndexA = indexA.getAll();
const result = new Array();
//For each object in indexA, select the corresponding object in indexB
allIndexA.forEach((entryA) => {
const entriesB = indexB.get({field5: entryA.field2});
result.push({
entryA,
entriesB
});
});
问题内容: 该ElasticSearch文件上写着: 别名也可以映射到多个索引,并且在指定别名时,别名将自动扩展为别名索引。 但是,当我尝试为2个索引添加别名并向两个索引写入时,似乎都没有随文档更新。如果删除其中一个别名,它将正确地写入仍然存在的别名。 具有多个写别名失败: 结果: 使用单个别名: 结果: Elasticsearch是否支持写入多个索引?如果别名指向多个索引,是否为只读? 问题答案
问题内容: 我有两个必须分开的索引: 我将如何在搜索中“联接”这两个表,以使其返回以下内容: 问题答案: 正如您在其他问题中回答的那样,没有什么可以阻止您在建立索引时将名称存储在每个文档中,同时仍然具有包含数据的专用索引。请记住,这都是关于巧妙地对数据进行规范化,以便每个文档都可以根据需要实现“自包含”。 该解决方案的优点是每个订单商品都是完全独立的,您可以对其进行分组/汇总以获取给定订单的所有商
问题内容: 在此系统中,我们存储产品,产品图像(产品可能有很多图像)和产品的默认图像。数据库: 如您所见,和,是循环参考。可以吗 问题答案: 不,那不行。表之间的循环引用是混乱的。请参阅这篇(已有十年的历史)文章:SQL By Design:循环参考 一些DBMS可以特别小心地处理这些问题,但是MySQL会遇到问题。 作为您的设计,第一选择是使两个FK之一为可空。这使您能够解决“鸡与蛋”问题(我应
问题内容: 我真的很喜欢Lucene查询语言与ElasticSearch的简单可组合性。我们刚刚开始使用嵌套对象,并且我知道我需要使用嵌套查询来搜索它们,但是在使用Lucene语法进行嵌套查询时,我找不到任何信息。 如果可能的话,某处是否有一些文档? 我已经对“ elasticsearch lucene”进行了相当广泛的谷歌搜索,并且很难找到偶尔提及该语法的博客文章,更不用说实际的文档了。同样,在
问题内容: 给定两个值x和y,我想将它们传递给另一个函数,交换它们的值并查看结果。这在Java中可行吗? 问题答案: 不与原始类型(,,等)。Java按值传递东西,这意味着函数传递的变量是原始变量的副本,并且您对该副本所做的任何更改都不会影响原始变量。 现在,对象有所不同,因为对象变量的“值”实际上是对对象的引用-复制该引用使其指向完全相同的对象。 局限性在于,您仍然无法以调用者可以看到的任何方式