我有两个问题。
{'bool':
{'must':
{ 'terms': 'metadata.loc':['ten','twenty']}
{ 'terms': 'metadata.doc':['prince','queen']}
}
{'should':
{ 'match': 'text':'kingdom of dreams'}
}
},
{'highlight':
{'text':
{'type':fvh,
'matched_fields':['metadata.doc','text']
}
}
}
有两个问题?
为什么带有查询匹配的文档会突出显示,而只有必须匹配的文档才会突出显示。
是否有任何方法可以提及特定于上述术语查询的突出显示条件?
这意味着突出{ 'terms': 'metadata.loc':['ten','twenty']}
和{ 'terms': 'metadata.doc':['prince','queen']}
答案 0 :(得分:1)
1)只有带有应该查询的文档才会突出显示,因为您只针对text
字段进行突出显示,这基本上是您的应用子句。虽然您使用的是matched_fields
,但您只考虑text
字段。
来自Docs
所有matched_fields必须将term_vector设置为with_positions_offsets,但仅加载组合匹配的字段,因此只有该字段可以从存储设置为yes中受益。
此外,您正在组合两个非常不同的字段'matched_fields':['metadata.doc','text']
,这很难理解,再次来自文档
从技术上讲,将字段添加到不与共享匹配的字段共享相同底层字符串的matched_fields也可以。结果可能没有多大意义,如果其中一个匹配项不在文本的末尾,则整个查询将失败。
2)您可以使用Highlight Query
编写特定于术语查询的突出显示条件在查询的highlight
部分中尝试此操作
{
"query": {
...your query...
},
"highlight": {
"fields": {
"text": {
"type": "fvh",
"matched_fields": [
"text",
"metadata.doc"
]
},
"metadata.doc": {
"highlight_query": {
"terms": {
"metadata.doc": [
"prince",
"queen"
]
}
}
},
"metadata.loc": {
"highlight_query": {
"terms": {
"metadata.loc": [
"ten",
"twenty"
]
}
}
}
}
}
}
这有帮助吗?