【问题标题】:Multi-field search in the elasticsearch-js libraryelasticsearch-js 库中的多字段搜索
【发布时间】:2017-02-11 05:34:43
【问题描述】:

我正在使用带有 elasticsearch-js npm 客户端库的 elasticsearch(来自 searchly 的托管实例)。我想从一个术语中搜索索引中的多个字段。这似乎有很多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 元素?",

【问题讨论】:

    标签: javascript node.js search elasticsearch


    【解决方案1】:

    由于您想在多个字段上匹配相同的字符串,您需要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);
    });
    

    【讨论】:

    • 如何为字段添加权重?
    猜你喜欢
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 2021-12-06
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    相关资源
    最近更新 更多