2016-11-25 17 views
0

私はElasticsearch v2.4.2のインデックスを持っています。括弧で囲まれたタイプに複数のクエリといくつかの特別な値を入れています。クエリ - ドキュメントのようになります。括弧のタイプに照会を検索

"query" : { 
     "query_string" : { 
     "fields" : [ "title", "meta" ], 
     "query" : "notebooks AND clamps" 
     }, 
     "key_id" : 14, 
     "owner_id" : 481, 
     "priority" : 50, 
     "special_id" : 477 
    } 

私も「のkey_id」の値と特異的にものを、.percolatorからこれらのクエリの一部を削除しようとしています。

問題は、私が.percolatorで検索を実行しようとしているが、結果が得られていないということです。

curl 'localhost:9200/percolate_index_d/.percolator/_search?q=key_id:14&pretty' 


curl 'localhost:9200/percolate_index_d/.percolator/_search?&pretty' -d '{ query:{filtered:{filter:{term:{"key_id":"14"}}}} }' 

をしかし、私はいつもこれを取得::例えば、私はこれらのカールの呼び出しを試みた

{ 
     "took" : 6, 
     "timed_out" : false, 
     "_shards" : { 
     "total" : 5, 
     "successful" : 5, 
     "failed" : 0 
     }, 
     "hits" : { 
     "total" : 0, 
     "max_score" : null, 
     "hits" : [ ] 
     } 
    } 

私もquery.key_idが、運を使用してみました。 .percolatorの型を検索することが可能な場合や、これに対していくつかの回避策があるかどうか、私が間違っているかどうかはわかりません。

答えて

1

上記のクエリはまったく正しくありません。あなたのインデックスに対してそれを実行しようとすると、あなたは構文エラーがあることがわかります。

クエリの正しい構文は次のようである:

{ 
    "query": { 
    "bool": { 
     "must": { 
     "query_string": { 
      "fields": [ 
      "title", 
      "meta" 
      ], 
      "query": "notebooks AND clamps" 
     } 
     }, 
     "filter": [ 
     { 
      "term": { 
      "key_id": 14 
      } 
     }, 
     { 
      "term": { 
      "owner_id": 481 
      } 
     }, 
     { 
      "term": { 
      "priority": 50 
      } 
     }, 
     { 
      "term": { 
      "special_id": 477 
      } 
     } 
     ] 
    } 
    } 
} 

その後、あなたはこのようなkey_id: 14でクエリを検索できるようになります:

curl 'localhost:9200/percolate_index_d/.percolator/_search?q=query.bool.filter.term.key_id:14&pretty' 

UPDATE

クエリのメタデータkey_id | owner_id | priority | special_idフィールドが適切な場所に設定されていない場合は、それらを外部に設定する必要がありますquery分野の、そうした後this_

{ 
    "query" : { 
    "query_string" : { 
     "fields" : [ "title", "meta" ], 
     "query" : "notebooks AND clamps" 
    } 
    }, 
    "key_id" : 14, 
    "owner_id" : 481, 
    "priority" : 50, 
    "special_id" : 477 
} 

のように、あなたはあなたの答えのための

curl 'localhost:9200/percolate_index_d/.percolator/_search?q=key_id:14&pretty' 
+0

おかげでクエリを取得することができます。問題は、key_id | owner_id | priority | special_idでフィルタリングしたくないということです。上記の私の質問はちょうど.percolatorのクエリ文書です。私は "_percolate" APIとのマッチを見つけたときにそれらを使用するために "key_id"のような値を追加しました。クエリは、with_percolateとうまく動作しますが、(たとえば)クエリードキュメントをkey_id <200で検索する必要があります。 –

+0

申し訳ありませんが、私はあなたの最初の必要性を誤解しました。 key_id | owner_id | priority | special_idもクエリの用語フィルタと考えられていましたが、クエリのメタデータフィールドとしてのみ追加しています。私はそれに応じて私の答えを更新しました。 – Val

+0

ありがとう、それは期待どおりに働いた! "query.key_id = 14"のように動作しなかった理由を知っていますか? –

関連する問題