[英]Elasticsearch highlight fields not in query
我有一个包含许多字段的文档,每个字段都包含短文本。
为了启用自定义提升并避免出现性能问题,我根据提升级别创建了这些字段的分组。 例子:
"partName": {
"type": "text",
"copy_to": "fuzzyMatchFields_boost5"
},
这意味着为了匹配partName
,我将对fuzzyMatchFields_boost5
进行模糊匹配搜索并将分数提高5 倍。 查询类似于:
QueryBuilders.boolQuery()
.must(
QueryBuilders.multiMatchQuery(terms)
.field("exactMatchFields_boost5", 5f)
.field("exactMatchFields_boost2", 2f)
.field("fuzzyMatchFields_boost5", 5f)
.field("fuzzyMatchFields_boost4", 4f)
.field("fuzzyMatchFields_boost3", 3f)
.field("fuzzyMatchFields_boost2", 2f)
)
...
等等(我正在使用 Java 客户端,但这只是顺便说一句。)
这很好用,但现在我正在尝试添加匹配的突出显示。
问题是我不直接查询字段,而不是只查询它们的分组字段。 因此,当我尝试突出显示时,我什么也得不到。
我已经发现我可以切换一个标志( require_field_match
)并传递字段名称,不管:
val highlightBuilder = HighlightBuilder()
.requireFieldMatch(false)
highlightFields.forEach { field ->
highlightBuilder.field(field)
}
这在某些情况下有效,但对其他人无效。 我无法弄清楚为什么某些字段有效,为什么某些字段不有效。 我什至不确定这是否应该工作。
一种可能的解决方案是专门为突出显示定义另一个查询(这在 Elasticsearch 中是可能的)。 我担心的是性能,即。 这显然需要我单独列出所有字段。 我什至不明白为什么我需要一个查询,因为我认为对于任何匹配的文档,荧光笔只是单独处理它们。 但也许情况并非如此。
这里最好的解决方案是什么?
这成功了:
Elasticsearch 突出显示:对使用“copy_to”创建的自定义“_all”字段的“多匹配”查询
所以我对一些聚合字段有一个 n-gram 分析器,但对原始字段没有(因为我不想直接查询它们)。 一旦我将分析器添加到突出显示的各个字段,就会开始正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.