我希望以下查询返回在特定字段中用OR分隔的确切短语匹配的结果。
{
"query": {
"nested": {
"path": "positions",
"query": {
"bool": {
"must": [
{
"query_string": {
"default_field": "positions.companyname",
"query": "microsoft OR gartner OR IBM"
}
},
{
"query_string": {
"default_field": "positions.title",
"query": "(Chief Information Security Officer) OR (Chief Digital Officer)"
}
}
]
}
},
"inner_hits": {
"highlight": {
"fields": {
"positions.title": {}
}
}
}
}
}
}
结果应包含确切的首席信息安全官或首席数字官,
但不是 首席 数字营销主管 或 首席 < em>信息 Officer ,因为它目前正在返回。
此外,该字段不一定必须具有要搜索的确切短语。 例如:
“ CIO首席信息官”->错误
“数字技术负责人-首席数字官”->是
“前首席信息安全官”->是
“首席信息官”->错误
我想我要说的是这些短语应该总是彼此相邻(接近)。
答案 0 :(得分:1)
对于您的用例,我建议您在match_phrase query应该子句中使用bool query's。
类似的事情应该起作用:
GET stackoverflow/_search
{
"query": {
"bool": {
"should": [
{
"match_phrase": {
"text": "Chief Information Security Officer"
}
},
{
"match_phrase": {
"text": "Chief Digital Officer"
}
}
]
}
}
}
答案 1 :(得分:0)
此查询即可完成。
{
"query": {
"nested": {
"path": "positions",
"query": {
"bool": {
"must": [
{
"query_string": {
"default_field": "positions.companyname",
"query": "microsoft OR gartner OR IBM"
}
},
{
"bool": {
"should": [
{
"match_phrase": {
"positions.title": "chief information security officer"
}
},
{
"match_phrase": {
"positions.title": "chief digital officer"
}
}
]
}
}
]
}
}
}
}
}
match_phrase 确保要搜索的是确切的词组。要在同一字段上匹配多个词组,请使用 bool 运算符,且条件为应该。