我有一个文档索引,看起来像这样:
{
url: "/foo/bar",
html_blocks: [
"<h1>hi</h1>"
],
tags: [
"video",
"text"
],
title: "My title"
}
我想在标题和 html_blocks 字段中查询这些文档,对于任何匹配,如果他们有视频,则添加提升标签。
到目前为止,我的查询如下:
{
"query": {
"query_string": {
"query": "foo",
"fields": [
"title",
"html_blocks"
]
}
}
}
如何修改它以使其继续仅在现有查询中找到匹配项时返回结果,但是对具有视频的任何结果添加了提升标签?谢谢!
答案 0 :(得分:3)
你想要一个custom_filters_score,只会增加匹配。请注意,不会分析过滤器输入,因此如果需要对其进行分析,可以将其包装在查询中。你提升的其他选择虽然不是真的适用于这种情况,但是提升查询有利于降级结果,而custom_score_query可以根据某些计算值增加提升。
{
"query": {
"custom_filters_score": {
"query": {
"query_string": {
"query": "foo",
"fields": [
"title",
"html_blocks"
]
}
},
"filters": [
{
"filter": {
"term": {
"tags": "video"
}
},
"boost": 3
}
]
}
}
}
编辑:
这就是我使用过滤查询包装查询的意思。相信我,一旦你掌握了ES,你就会被套牢,以至于你会产生一些最令人满意的查询。
{
"query": {
"custom_filters_score": {
"query": {
"query_string": {
"query": "foo",
"fields": [
"title",
"html_blocks"
]
}
},
"filters": [
{
"filter": {
//here comes the filter query, and I changed term to match
//since match analyzes
"query":{
"match": {
"tags": "video"
}
}
},
"boost": 3
}
]
}
}
}