2017-10-16 10 views
0

以下は、現在の日付の「mike」という名前のユーザー全体のすべての情報を返すクエリです。あなたが見ることができるように私はワイルドカードを使用してmikeと呼ばれるすべてのユーザーをmikeの後に任意の名前にしたいと思っています)正しいデータが返されないクエリ

しかし、現時点ではデータが返されていますが、ワイルドカードはマイクだけでなくすべてのユーザーのためにデータを戻しています。

誰かが実際にワイルドカードを使って作業する必要がありますか?

マイコード:

GET_search 
    { 
     "_source": [ 
     "N" 
     ], 
     "query": { 
     "bool": { 
      "should": [ 
      { 
       "wildcard": { 
       "N": "mike*" 
       } 
      } 
      ], 
      "must": [ 
      { 
       "range": { 
       "VT": { 
        "gte": "now/d", 
        "lte": "now+1d/d" 
       } 
       } 
      } 
      ] 
     } 
     } 
    } 

答えて

1

あなたの問題はwildcardクエリではありませんが、それはshouldリストにという事実。 the bool query docsでは、それは言う:

ブールクエリは、クエリコンテキスト内にあり、その文書がのどれもが試合に照会してはならない場合でも、ブールクエリに一致しますしないと、フィルタ句を持っている場合。あなたの状況である

{ 
    "_source": [ 
    "N" 
    ], 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "range": { 
      "VT": { 
       "gte": "now/d", 
       "lte": "now+1d/d" 
      } 
      } 
     }, 
     { 
      "wildcard": { 
      "N": "mike*" 
      } 
     } 
     ] 
    } 
    } 
} 

またshouldを維持し、1のminimum_should_matchを追加するために働くだろうが、私は任意の正当な理由を考えることはできません:あなたはこのように、単に必見リストにワイルドカードクエリを移動することでこの問題を解決することができますそれをする。

+0

説明していただきありがとうございます。あなたのコードは私のために働いています!どうもありがとうございます。私は今、今日のすべてのデータを元に戻すことができますが、今日の午前11時から午後2時の間にのみデータを持ち込む方法があるのですか? – Rich

+0

私はまた、あなたの答えをアップアップし、正しいものとしてあなたの答えをチェックしました! – Rich

+0

はい - "2017-10-16T11:00"のような正確な日付を使用することができます(形式はマッピ​​ングに依存しますが、これがデフォルトです)。または、相対 "now/d + 11h"が必要な場合。 [date math docs](https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#date-math)を参照してください。 – dshockley

関連する問題