在Elasticsearch中,我有与线程和查询匹配的代码。当前它可以很好地匹配一个线程,但是我有一个线程数组。如果字段“线程”与数组中的任何线程匹配,我希望获得成功。例如,如果我有一个['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']
              }
            }
          ]
        }
      }
    }
  })

最佳答案

我认为实现此目标的最佳方法是使用另一种称为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" }
            }
        ]
    }
}

希望这可以帮助 :)

关于node.js - Elasticsearch的$ in(在mongodb中)等价于什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37932060/

10-11 17:46