elasticsearch ElasticSearch:在带有查询字符串的运算符查询中,elasticsearch,elasticsearch" /> elasticsearch ElasticSearch:在带有查询字符串的运算符查询中,elasticsearch,elasticsearch" />

elasticsearch ElasticSearch:在带有查询字符串的运算符查询中

elasticsearch ElasticSearch:在带有查询字符串的运算符查询中,elasticsearch,elasticsearch,我想将记录与查询字符串进行匹配,因此我编写了以下运行良好的查询: { "query": { "query_string": { "fields": ["rollno","name"], "query": "*John*" } } } 现在,除了匹配字段,我还想在查询中对另一个字段实现。我尝试了查询,如下所示: { "query": { "query_string": { "fields": ["rollno", "

我想将记录与查询字符串进行匹配,因此我编写了以下运行良好的查询:

{
  "query": {
    "query_string": {
      "fields": ["rollno","name"],
        "query": "*John*"
      }
  }
}
现在,除了匹配
字段
,我还想在查询中对另一个字段实现
。我尝试了查询,如下所示:

{
"query": {
    "query_string": {
        "fields": ["rollno", "name"],
        "query": "*John*"
    },
    "match": {
        "majorSubject": ["Biology", "Chemistry"]
    }
  }
}
我得到的只是
搜索\解析\异常


如何在
操作中执行此操作?

您需要使用一个
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"
            ]
          }
        }
      ]
    }
  }
}

当我这样做时,当我实际有匹配的数据时,查询根本不会返回任何结果。请看我的答案,我是如何解决这个问题的。这可能有副作用,我现在还不知道。试着用小写字母
biology
chemistry
是的,这是因为
主主题
字段是一个分析过的字符串,并且索引的标记是小写的。我理解。当我定义映射时,我应该将
majorSubject
指定为
non_analysisted
,以便只匹配精确的值,就像在我的情况下,
majorSubject
将只具有一些固定值一样。但是现在,
解剖学
将同时匹配
社会解剖学
生物解剖学
,这肯定是个问题。谢谢你的洞察力!