2017-07-07 77 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

工作。这是极好的。 –