我有一个像
这样的查询结构{
"sort": {},
"query": {
"bool": {
"should": [
{
"match_phrase": {
"user_categories": "Grant Writing"
}
},
{
"match_phrase": {
"user_agencies": "Census"
}
},
{
"match_phrase": {
"user_agencies": "MDA"
}
},
{
"match_phrase": {
"user_agencies": "OSD"
}
}
]
}
},
"size": 500,
"from": 0
}
假设这将返回10个用户的列表。
我需要得到的是,代理商:'人口普查'的用户是搜索结果中的第一个(提升人口普查作为代理商的结果)。我们怎么做到这一点?
答案 0 :(得分:3)
以下将会这样做。我将部分match_phrase
次查询转换为match
次查询,因为它们只包含单个字词
{
"sort": {},
"query": {
"bool": {
"should": [
{
"match_phrase": {
"user_categories": "Grant Writing"
}
},
{
"match": {
"user_agencies": {
"query": "Census",
"boost": 3
}
}
},
{
"match": {
"user_agencies": {
"query": "MDA",
}
},
{
"match": {
"user_agencies": {
"query": "OSD",
}
}
]
}
},
"size": 500,
"from": 0
}
答案 1 :(得分:0)
你应该提升at query time,并通过"人口普查"提供大量文件。在代理领域。如果提升足够高,则匹配"人口普查"无论其他字段的值如何,它都将始终位于顶部。
{
"sort": {},
"query": {
"bool": {
"should": [
{
"match_phrase": {
"user_categories": "Grant Writing"
}
},
{
"match_phrase": {
"user_agencies": "Census", "boost": 10
}
},
{
"match_phrase": {
"user_agencies": "MDA"
}
},
{
"match_phrase": {
"user_agencies": "OSD"
}
}
]
}
},
"size": 500,
"from": 0
}