我会给这个一个刺!我将建议您使用嵌套文档和 custom_filters_score 查询(由 .90.4 中的函数 score 替换。我还没有完全研究过那个。
首先,让我们将“名称”字段放在层次结构路径中只是为了好玩。您始终可以将名称字段匹配 1.5 或 2 倍并保留字段原样,但这将使我们更加清晰。我还将要求您将数据格式更改为如下所示。
{
"name": "Palo Alto",
"path": [
{
"name": "USA",
"level": 1
},
{
"name": "California",
"level": 2
},
{
"name": "Santa Clara County",
"level": 3
},
{
"name": "Palto Alto",
"level": 4
}
]
}
现在,我将为您的字段映射更改为嵌套文档。
{
"my_document": {
"properties": {
"path": {
"type": "nested",
"properties": {
"name": {
"type": "string"
},
"level": {
"type": "integer"
}
}
}
}
}
}
现在我们要做一个查询,这看起来有点疯狂。而且,老实说,有一些选择可以让你实现一些定制。另外,我可能会忽略一些明显的东西,但我很想听听。嘿,来晚了!
{
"query": {
"custom_filters_score": {
"query": {
"constant_score": {
"query": {
"nested": {
"path": "path",
"query": {
"fuzzy_like_this_field": {
"path.name": {
"like_text": "palo alto",
"min_similarity": 0.9,
"prefix_length": 2
}
}
}
}
},
"boost": 1
}
},
"filters": [
{
"filter": {
"nested": {
"path": "path",
"query": {
"bool": {
"must": [
{
"fuzzy_like_this_field": {
"name": {
"like_text": "palo alto",
"min_similarity": 0.9,
"prefix_length": 2
}
}
},
{
"term": {
"level": 2
}
}
]
}
}
}
},
"boost": 1
},
{
"filter": {
"nested": {
"path": "path",
"query": {
"bool": {
"must": [
{
"fuzzy_like_this_field": {
"name": {
"like_text": "palo alto",
"min_similarity": 0.9,
"prefix_length": 2
}
}
},
{
"term": {
"level": 3
}
}
]
}
}
}
},
"boost": 2
},
{
"filter": {
"nested": {
"path": "path",
"query": {
"bool": {
"must": [
{
"fuzzy_like_this_field": {
"name": {
"like_text": "palo alto",
"min_similarity": 0.9,
"prefix_length": 2
}
}
},
{
"term": {
"level": 4
}
}
]
}
}
}
},
"boost": 3
},
{
"filter": {
"nested": {
"path": "path",
"query": {
"bool": {
"must": [
{
"fuzzy_like_this_field": {
"name": {
"like_text": "palo alto",
"min_similarity": 0.9,
"prefix_length": 2
}
}
},
{
"term": {
"level": 5
}
}
]
}
}
}
},
"boost": 4
},
{
"filter": {
"nested": {
"path": "path",
"query": {
"bool": {
"must": [
{
"fuzzy_like_this_field": {
"name": {
"like_text": "palo alto",
"min_similarity": 0.9,
"prefix_length": 2
}
}
},
{
"term": {
"level": 6
}
}
]
}
}
}
},
"boost": 5
}
],
"score_mode" : "max"
}
}
}