Elasticsearch相当于$ in(在mongodb中)?

时间:2016-06-20 21:25:07

标签: node.js mongodb elasticsearch

在Elasticsearch中,我有一个匹配线程和查询的代码。它目前适用于匹配一个线程,但我有一个线程数组。如果字段“thread”匹配数组中的任何线程,我想得到一个命中。例如,如果我有['1','2','3']的数组,我想匹配如果“thread”字段匹配'1','2'或'3',而不仅仅是' 1。我该怎么做?

client.search({
    index: 'searchable-message',
    body: {
      query: {
        bool: {
          must: [
            {
              match: {
                thread: '1' //<--WORKS FOR ONE, BUT NOT  ARRAY
              }
            },
            {
              multi_match: {
                query: req.query.q,
                fields: ['message_text', 'stripped_text', 'links', 'documents.text_contents']
              }
            }
          ]
        }
      }
    }
  })

1 个答案:

答案 0 :(得分:2)

我认为实现此目标的最佳方法是使用名为terms的其他查询方法。

尝试使用match查询更改terms查询。 Here是术语查询文档。

示例:

{
   "terms": { 
       "thread": ['1', '2', '3'] 
   }
}

bool查询documentation还提供了term查询的一个很好的示例,该查询与terms查询的语法类似:

{
    "bool" : {
        "must" : {
            "term" : { "user" : "kimchy" }
        },
        "filter": {
            "term" : { "tag" : "tech" }
        },
        "must_not" : {
            "range" : {
                "age" : { "from" : 10, "to" : 20 }
            }
        },
        "should" : [
            {
                "term" : { "tag" : "wow" }
            },
            {
                "term" : { "tag" : "elasticsearch" }
            }
        ]
    }
}

希望这会有所帮助:)