使用nodejs中的elasticsearch获取基于属性值的文档

时间:2014-11-26 05:40:43

标签: node.js elasticsearch

我正在使用Elasticsearch,我是这项技术的新手。我不知道如何使用nodejs在elasticsearch中搜索索引类型的属性值。我的数据是

{
           "line_num": 1,
           "action1": "ORIGINAL",
           "process_code1": "PENDING",
           "isPR": "Y",
           "req_header_reference_num": "PC5298",
           "req_line_reference_num": "PC5298",
           "pr_line_no": "1",
           "pr_id": "ffd3f7cc6",
           "pr_po_flag": "N",
           "pr_item_id": "720541"
 }

从这个数据我想根据属性值进行搜索。 例 如果我提供" ORIGINAL" ,基于此来从elasticsearch获取特定文档 那怎么解决这个问题呢 提前谢谢

1 个答案:

答案 0 :(得分:3)

如果您的目标是匹配任何包含值" ORIGINAL"你必须使用"multi match" query

在你的例子中,这意味着:

POST /index/type/_search
{
   "query": {
      "multi_match": {
         "query": "ORIGINAL",
         "fields": [ "*" ],
         "lenient": true
      }
   }
}

但请注意,这种查询方式效率不高,最好将单个字段与"匹配"匹配。查询:

POST /index/type/_search
{
   "query": {
      "match": {
          "action1" : "ORIGINAL"
      }
   }
}

在node.js中,您可以使用the official elastic library更轻松地查询弹性搜索。

例如,在您的情况下,您将使用此库编写此类代码:

var elasticsearch = require('elasticsearch');
var client = new elasticsearch.Client({
    host: 'localhost:9200',
    log: 'trace'
});
client.search({
    index: 'index',
    type: 'type',
    body: {
        query: {
            match: {
                action1: 'ORIGINAL'
            }
        }
    }
}).then(function (resp) {
    var hits = resp.hits.hits;
    console.log(hits);
}, function (err) {
    console.trace(err.message);
});