1

簡単な質問:私は、logstashを使ってpostgresqlによってミラーリングされたelasticsearchエンジンに複数のインデックスを持っています。 ElasticSearchはファジー検索には効果がありますが、インデックス内でクエリで処理する必要のある参照を使用する必要があります。ElasticSearchマルチインデックスクエリ

が「b」および「」

で始まる名前の「best_friend」によって参照インデックスAで始まるフィールド名とインデックスBのすべての試合を取得します:私は照会するにはどうすればよい

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

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

これはelasticsearchでも可能ですか?

+0

(https://stackoverflow.com/questions/36915428/how-to-setup-elasticsearch-index-structure-with-multiple-entity-bindings/36982705# 36982705)を使用して、後でよりよく照会することができます。 – Val

答えて

1

はい、可能です。POST A,B/_searchは複数のインデックスをクエリします。

特定のインデックスからレコードを一致させるためには、あなたは以下meta-data field_index

を使用することができますは名前の「B」とインデックスAで始まるフィールド名とインデックスBのすべての試合を取得するクエリです"a"で始まるですが、通常はリレーショナルSQLデータベースと同様にの参照と一致しません。 Elasticと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" 
       } 
       } 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 
あなたは[あなたのデータを非正規化]を考える必要があります
+0

ありがとう@mjalil && Val - データ構造を平坦化すると思います。 – christian667