【发布时间】:2016-01-23 02:40:53
【问题描述】:
给定这样的词组匹配查询:
{
'match_phrase': {
'text.english': {
'query': "The fox jumped over the wall",
'phrase_slop': 4,
}
}
}
有没有办法按完全匹配对结果进行分组?
因此,如果我有 1 个文档 text.english 包含“快速狐狸跳过小墙”和 3 个文档包含“懒狐狸跳过大墙”,我最终会得到这两组结果。
我可以在 ES 之外运行多个查询并进行一些处理,但我需要一个能够在大量文档上合理执行的解决方案。理想情况下,我希望有一种方法可以使用我错过的聚合来做到这一点。
我想出的最佳解决方案是运行上面的高亮查询,从所有结果中解析出所有高亮,然后根据高亮内容对它们进行分组。这对于非常小的结果集来说很好,但是对于超过 1000 个文档的结果集,它的速度非常慢。
编辑: 也许我可以让这更清楚一点。如果我有具有以下值的示例文档:
- “敏捷的狐狸跳过小墙。废话废话很多页无关的文字。”
- “懒惰的狐狸跳过了大墙。废话废话很多页无关的文字。”
- “懒惰的狐狸跳过了大墙。废话废话很多页无关的文字。”
- “懒惰的狐狸跳过了大墙。废话废话很多页无关的文字。”
我希望能够使用查询文本“狐狸跳过墙”将结果分组如下:
- “快狐跳过小墙” - 文档 1
- “懒狐跳过大墙” - 文档 2、3、4
【问题讨论】:
-
你想达到什么目的?从这两个示例文档中,您能解释一下期望的结果是什么?
-
好的,所以您希望您的查询匹配,但结果应该按它们匹配的文本分组?
text.english.raw上的简单聚合应该可以做到(其中.raw是not_analyzed子字段)。 -
没错,我想按完全匹配的文本对结果进行分组。我有每个文档的分析副本和原始副本。聚合是如何工作的?我找不到能做到这一点的人。
-
"The lazy fox jumped over the big wall"这是最初编入索引的文本。您想根据此文本或其他内容进行分组吗?如果你的文本有 5 行,你想对整个文本进行分组吗? -
我想根据匹配进行分组,而不是整个文本。
标签: elasticsearch