简单的问题:我的弹性搜索引擎中有多个索引使用logstash由postgresql镜像。 ElasticSearch在模糊搜索中表现良好,但现在我需要在索引中使用需要由查询处理的引用。
Index A:
{
name: "alice",
_id: 5
}
...
Index B:
{
name: "bob",
_id: 3,
best_friend: 5
}
...
我如何查询:
获取索引B的每个匹配项,字段名称以“b”开头,索引A由“best_friend”引用,名称以“a”开头
弹性搜索是否可以实现这一点?
答案 0 :(得分:2)
是的,可能:POST A,B/_search
将查询多个索引。
为了匹配特定索引的记录,您可以使用meta-data field _index
以下是获取索引B的每个匹配且字段名称以&#34开头的查询; b"和索引A,名称以" a" 开头,但不像通常在关系SQL数据库中那样匹配引用。 Elastic中的外键引用匹配(join)和每个NoSQL都是您的责任AFAIK。请参考Elastic Definitive Guide找出满足您需求的最佳方法。最后,NoSQL不是SQL,改变主意。
POST A,B/_search
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"prefix": {
"name": "a"
}
},
{
"term": {
"_index": "A"
}
}
]
}
},
{
"bool": {
"must": [
{
"prefix": {
"name": "b"
}
},
{
"term": {
"_index": "B"
}
}
]
}
}
]
}
}
}