ElasticSearch多索引查询

时间:2017-11-30 12:12:00

标签: postgresql elasticsearch logstash elasticsearch-plugin logstash-configuration

简单的问题:我的弹性搜索引擎中有多个索引使用logstash由postgresql镜像。 ElasticSearch在模糊搜索中表现良好,但现在我需要在索引中使用需要由查询处理的引用。

Index A:
{
  name: "alice",
  _id: 5
} 
...

Index B:
{
  name: "bob",
  _id: 3,
  best_friend: 5
}
...

我如何查询:

获取索引B的每个匹配项,字段名称以“b”开头,索引A由“best_friend”引用,名称以“a”开头

弹性搜索是否可以实现这一点?

1 个答案:

答案 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"
                }
              }
            ]
          }
        }
      ]
    }
  }
}