2017-07-07 76 views
2

我要匹配的查詢字符串的記錄,所以我寫了下面的查詢操作查詢這是工作的罰款:從匹配fieldsElasticSearch:在QUERY_STRING

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

現在分開,我想要實現IN也針對另一個字段進行查詢。我試過this查詢,如:

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

我得到的是search_parse_exception

如何對此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

工作。這是極好的。 –