ElasticSearch 1.2.1
我正在尝试使用加权标签查询文档。
curl -X PUT 'http://localhost:9200/test'
curl -X PUT 'http://localhost:9200/test/thing/_mapping' - '{
"thing": {
"properties": {
"tags": {
"type": "nested",
"properties": {
"name": { "type": "string" },
"weight": { "type": "integer" }
}
}
}
}}'
添加文档:
curl -X PUT 'http://localhost:9200/test/thing/1', -d '{
"tags": [
{ "name": "a", "weight": 2 }
]
}'
现在我正在搜索标记为a
的文档,并根据weight
提升分数。
注意:要运行这些示例,您必须在ElasticSearch中启用动态脚本:将script.disable_dynamic: false
添加到elasticsearch.yml
curl -X GET 'http://localhost:9200/test/thing/_search?pretty' -d '{
"query": {
"function_score": {
"boost_mode": "replace",
"query": {
"match_all": {}
},
"functions": [
{
"filter": {
"nested": {
"path": "tags",
"filter": {
"term": {
"tags.name": "a"
}
}
}
},
"script_score": {
"script": "doc.weight.value"
}
}
]
}
}
}'
按预期找到该文档,但得分为0
。似乎属性doc.weight
是空的。
让我们通过用doc.weight.empty ? 50 : 100
替换脚本来测试它。点击现在的得分为50
,表示字段doc.weight
为空。它是发现,因为使用不存在的字段名称(例如doc.foobar
)会出错。
背景:match_all
部分将被真实查询替换。我想在不匹配标签之前使用标签来提升与标签匹配的结果。
我错过了什么?