这是一个代码
GET /news/_search
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "France and Luxembourg",
"fields": [
"stkno",
"tag",
"content",
"htext"
],
"operator": "and"
}
},
{
"range": {
"CDate": {
"gt": "2017-05-23T14:02:11",
"lte": "2017-05-24T23:59:59"
}
}
}
]
}
},
"from": 0,
"size": 100,
"sort": [
{
"CDate": {
"order": "desc"
}
}
]
}
使用上面的命令后,命中总数为2条记录。但有一个词恰恰是“法国和卢森堡”,另一个词只是“法国”。
我的问题如下:
重新编辑:
我尝试使用如下编码,但结果变空。enter code here
POST _search
{
"query": {
"bool": {
"should": [
{
"term": {
"stkno": "France and Luxembourg"
}
},
{
"term": {
"tag": "France and Luxembourg"
}
},
{
"term": {
"context": "France and Luxembourg"
}
},
{
"term": {
"htext": "France and Luxembourg"
}
}
],
"minimum_should_match": 1
}
}
}
感谢...
答案 0 :(得分:0)
如上所述here,当您使用multi-match
和and
运算符时,它是字段的多重匹配。所以你的查询变成了
(+stkno:France +stkno:and +stkno:Luxembourg)
| (+tag:France +tag:and +tag:Luxembourg)
| (+context:France +context:and +context:Luxembourg)
| (+htext:France +htext:and +htext:Luxembourg)
要完全匹配,您可以使用term query。
您可以将multi-match
部分单独更改为另一个bool查询
{
"bool": {
"should": [
{
"term": {
"stkno": "France and Luxembourg"
}
},
{
"term": {
"tag": "France and Luxembourg"
}
},
{
"term": {
"context": "France and Luxembourg"
}
},
{
"term": {
"htext": "France and Luxembourg"
}
}
],
"minimum_should_match": 1
}
}