elasticsearch-js库中的多字段搜索

时间:2016-10-03 09:49:16

标签: javascript node.js search elasticsearch

我正在使用elasticsearch(来自searchly的托管实例)和elasticsearch-js npm客户端库。我想从一个术语中搜索索引中的多个字段。似乎有documentation的负载,例如

GET /_search
{
  "query": {
    "bool": {
      "should": [
        { "match": { "title":  "War and Peace" }},
        { "match": { "author": "Leo Tolstoy"   }}
      ]
    }
  }
}

我可以为作者和标题设置相同的值。但是,这是一个get请求,其结构与nodejs库不同,我在这里执行此操作:

this._client.search({
  index: 'sample',
  body: {
    query: {
      match: {
        name: 'toFind'
      }
    }
  }
}).then(function (resp) {
  var hits = resp.hits.hits;
}, function (err) {
  console.trace(err.message);
});

我不能有多个match:字段,否则tsc会抱怨严格模式,如果我尝试这样的话:

    query: {
      match: {
        name: 'toFind',
        description: 'toFind'
      }
    }

然后我收到一个错误:

  

“type”:“query_parsing_exception”,

     

“reason”:“[match]查询以简化形式解析,带有直接字段名称,但包含的选项多于字段名称,可能使用\ u0027options \ u0027表单,带有\ u0027query \ u0027元素?”,

1 个答案:

答案 0 :(得分:3)

由于您希望在多个字段上匹配相同的字符串,因此需要multi match查询。试试这样的事情

this._client.search({
  index: 'sample',
  body: {
    query: {
      multi_match: {
        query: 'toFind',
        fields: ['name','description']
      }
    }
  }
}).then(function (resp) {
  var hits = resp.hits.hits;
}, function (err) {
  console.trace(err.message);
});