如何在节点 js 中使用弹性搜索编写 OR 查询



我的文档是这样的

示例文档,

    [
  {
    "_index": "xpertdox",
    "_type": "disease",
    "_id": "Ectopic Heartbeat",
    "_score": 24.650267,
    "_source": {
      "category": "Condition",
      "name": "Ectopic Heartbeat",
      "dui": "D005117",
      "url_name": "Extrasystole"
    }
  },

这是我的示例文档。

 if (req.param('disease')) {
searchString = req.param('disease');
filterQuery = { Category: 
   ['disease','Condition','speciality','pharm','medicine']  };

 } else if (req.param('docorhosp')) {
    searchString = req.param('docorhosp');
    filterQuery = { Category: ['hospital', 'doctor'] };
  } else if (req.param('speciality')) {
    searchString = req.param('speciality');
    filterQuery =  { Category: ['speciality'] };
  }
  client.search({
    index: 'xpertdox',
    type: 'disease',
    size: 20,
    body: {
      query: {
        must: {
          match: {
            name: {
              query: searchString,
              fuzziness: 2,
              operator: "or"
            }
          }
        },
        filter : {
          terms : filterQuery
        }
      }
    }
  }).then(function (resp) {
    var data = resp.hits.hits;
    if (isFromSsr) {
      data = helper.prepareSearchDataForSsr(data);
    }
    res.json(data);
  });

正在将我的参数与名称匹配,但在这里我只想过滤类别为"医生"或"医院"的记录。如何开发我的查询以获得我的要求..

试试这个:

client.search({
    index: 'dox',
    type: 'disease',
    size: 20,
    body: {
      query: {
        must: {
          match: {
            name: {
              query: req.param('disease'),
              fuzziness: 2,
              operator: "or"
            }
          }
        },
        filter: {
          terms: {
            category: ['hospital', 'doctor']
          }
        }
      }
    }
})

相关内容

  • 没有找到相关文章

最新更新