【发布时间】:2026-02-18 06:05:03
【问题描述】:
我目前正在将一个应用程序从 Solr 迁移到 Elastic,并偶然发现了一个有趣的 Solr 功能,我无法在 Elastic 中重现该功能:对 Solr 的查询返回一个后处理标志,该标志对结果进行质量检查,指示所有令牌是否都是在结果字段中找到。
q = some_field:(the brown fox)
fl = some_field, full_match:exists(query({!edismax v='some_field:(the brown fox)' mm='100%'}))
Solr 结果如下:
{
"response": {
"docs": [
{
"some_field": "The Brown Bear",
"full_match": false
},
{
"some_field": "The Quick Brown Fox",
"full_match": true
}
]
}
}
客户端使用该标志来进一步处理结果文档,与分数无关(我在示例中省略了)。我发现这很聪明,因为使用了 Solr 的标记化和分布式计算能力,而不是在客户端做所有事情。
现在在 Elastic 中,我认为这应该在 script_fields 块中完成,但实际上我不知道如何使用无痛脚本执行子查询,经过两天的调查,我怀疑这是否可能:
{
"query": {
"match": {
"some_field": "the brown fox"
}
},
"_source": [
"some_field"
],
"script_fields": {
"full_match": {
"script": "???" <-- Search with Painless script?
}
}
}
欢迎任何创意。
【问题讨论】:
标签: elasticsearch solr elasticsearch-painless