我希望能够在任何字段中找到的每个搜索字词上加上查询前缀,我希望能够突出显示。我制定了一个似乎有用的查询。现在,我想更新查询,以便其中一个字段中的匹配产生的分数高于其他字段中的匹配。
例如,我索引以下数据(这只是一个示例,在我的实际数据中,还有更多的字段而不仅仅是两个):
PUT / my_index / my_type / abc124 { "标题" :" blah", "描述" :"高尔夫" }
PUT / my_index / my_type / abc123 { "标题" :" blah golf", "描述" :"当然" }
PUT / my_index / my_type / abc125 { "标题" :" blah golf tee", "描述" :"当然" }
然后我可以像查询一样查询:
POST my_index/my_type/_search
{
"query": {
"bool": {
"must": [
{
"prefix": {
"_all" : "gol"
}
},
{
"prefix": {
"_all": "bla"
}
}
]
}
},
"highlight":{
"fields":{
"*":{}
}
}
}
产生结果:
{
"took": 11,
"timed_out": false,
"_shards": {
"total": 4,
"successful": 4,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 1.4142135,
"hits": [
{
"_index": "my_index",
"_type": "my_type",
"_id": "abc125",
"_score": 1.4142135,
"_source": {
"title": "blah golf tee",
"description": "course"
},
"highlight": {
"title": [
"<em>blah</em> <em>golf</em> tee"
]
}
},
{
"_index": "my_index",
"_type": "my_type",
"_id": "abc124",
"_score": 1.4142135,
"_source": {
"title": "blah",
"description": "golf"
},
"highlight": {
"description": [
"<em>golf</em>"
],
"title": [
"<em>blah</em>"
]
}
},
{
"_index": "my_index",
"_type": "my_type",
"_id": "abc123",
"_score": 1.4142135,
"_source": {
"title": "blah golf",
"description": "course"
},
"highlight": {
"title": [
"<em>blah</em> <em>golf</em>"
]
}
}
]
}
}
如何使用function_score或其他方法修改评分,以便我可以在title字段上比其他字段得分更高?我是否需要将查询更改为多匹配而不是使用_all?任何建议将不胜感激。
此致 LT
答案 0 :(得分:2)
尝试添加bool
查询should
部分,如果should
中的任何语句匹配,则会对整个查询给出更高的分数(对于那些语句,这不是强制性的)匹配查询以返回结果)。
例如,试试这个:
POST my_index/my_type/_search
{
"query": {
"bool": {
"must": [
{
"prefix": {
"_all": "gol"
}
},
{
"prefix": {
"_all": "bla"
}
}
],
"should": [
{
"prefix": {
"title": {
"value": "gol",
"boost": 3
}
}
},
{
"prefix": {
"title": {
"value": "bla",
"boost": 3
}
}
}
]
}
},
"highlight": {
"fields": {
"*": {}
}
}
}