2017-01-17 9 views
0

私は2つのインデックスを持っていますユーザーURLです。私は、インデックスに基づいて異なるフィールドでクエリを実行したい。elasticsearchでインデックスにmulti_matchを使用するにはどうすればよいですか?

USERインデックスでは、クエリは、IDフィールドに検索する必要があります。 タイトルidフィールドで検索する必要があります。

POST /_search  
    { 
     "query":{ 
      "indices":[ 
      { 
       "indices":[ 
        "URL" 
       ], 
       "query":{ 
        "multi_match":{ 
         "query":"SMU ", 
         "fields":[ 
         "title", 
         "id" 
         ] 
        } 
       } 
      }, 
      { 
       "indices":[ 
        "USER" 
       ], 
       "query":{ 
        "multi_match":{ 
         "query":"SMU ", 
         "fields":[ 
         "name", 
         "id" 
         ] 
        } 
       } 
      } 
      ] 
     } 
    } 

上記のクエリは機能しません。それを動作させるために必要な変更は何ですか? multi_match検索とインデックス検索をマージするにはどうすればよいですか?

+0

どのESバージョンをお使いですか?現在のクエリでは何が動作しませんか? – Val

+0

現在、私はES 5.1を使用しています。サンプルクエリが機能していません。私はそのような仕事をするためのクエリを探しています。 –

答えて

1

indicesクエリはES 5では廃止されていますが、まだ機能しています。つまり、indicesクエリをbool/filter句に入れる必要があります。

{ 
    "query": { 
    "bool": { 
     "minimum_should_match": 1, 
     "should": [ 
     { 
      "indices": { 
      "indices": [ 
       "URL" 
      ], 
      "query": { 
       "multi_match": { 
       "query": "SMU ", 
       "fields": [ 
        "title", 
        "id" 
       ] 
       } 
      } 
      } 
     }, 
     { 
      "indices": { 
      "indices": [ 
       "USER" 
      ], 
      "query": { 
       "multi_match": { 
       "query": "SMU ", 
       "fields": [ 
        "name", 
        "id" 
       ] 
       } 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

indicesクエリが廃止されましたので、新しいアイデアではなく_indexフィールドに簡単なtermクエリを使用することです。試してみてください:

{ 
    "query": { 
    "bool": { 
     "minimum_should_match": 1, 
     "should": [ 
     { 
      "bool": { 
      "filter": [ 
       { 
       "term": { 
        "_index": "URL" 
       } 
       }, 
       { 
       "multi_match": { 
        "query": "SMU ", 
        "fields": [ 
        "title", 
        "id" 
        ] 
       } 
       } 
      ] 
      } 
     }, 
     { 
      "bool": { 
      "filter": [ 
       { 
       "term": { 
        "_index": "USER" 
       } 
       }, 
       { 
       "multi_match": { 
        "query": "SMU ", 
        "fields": [ 
        "name", 
        "id" 
        ] 
       } 
       } 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 
+0

これは私が探しているものとほとんど同じです。しかし、上記の答えでは、 "URL"と "USER"の両方を照合しようとしています。 「URL」または「USER」で検索するにはどうすればよいですか。 –

+0

'filter'を' should'で置き換えました。あなたはそれを持っています。 – Val

+0

絶対完璧です。 –

関連する問題