2017-07-07 6 views
2

をQUERY_STRINGとオペレータのクエリで私は、クエリ文字列に対するレコードを一致させたいので、私は正常に動作している次のクエリを書いた:ElasticSearch:

{ 
    "query": { 
    "query_string": { 
     "fields": ["rollno","name"], 
     "query": "*John*" 
     } 
    } 
} 

今、離れてfieldsに一致するから、私は実装したいですINを別のフィールドに対してもクエリします。私が得るすべてはsearch_parse_exceptionある

{ 
"query": { 
    "query_string": { 
     "fields": ["rollno", "name"], 
     "query": "*John*" 
    }, 
    "match": { 
     "majorSubject": ["Biology", "Chemistry"] 
    } 
    } 
} 

:私は、thisクエリを試してみました。

これはどのようにIN操作ですか?

答えて

2

あなたは、サブクエリの両方を結合するためにbool/mustクエリを使用する必要があります。

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "query_string": { 
      "fields": [ 
       "rollno", 
       "name" 
      ], 
      "query": "*John*" 
      } 
     }, 
     { 
      "terms": { 
      "majorSubject": [ 
       "Biology", 
       "Chemistry" 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 

majorSubjectフィールドが分​​析された文字列である場合、代わりに小文字の用語を使用します。

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "query_string": { 
      "fields": [ 
       "rollno", 
       "name" 
      ], 
      "query": "*John*" 
      } 
     }, 
     { 
      "terms": { 
      "majorSubject": [ 
       "biology", 
       "chemistry" 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 
+0

を私が行うと私は実際に一致するデータを持っているとき、このクエリは全く結果を返しません。どのように私はこれを解決した私の答えを参照してください。それは今私が知りません副作用があるかもしれません。 –

+0

小文字の「生物学」と「化学」 – Val

+0

と一緒に試してみてください。それは素晴らしいです。 –