在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']
}
}
]
}
}
}
})
答案 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" }
}
]
}
}
希望这会有所帮助:)