基于文本相似度的 Elasticsearch 折叠

时间:2021-03-06 01:06:40

标签: elasticsearch

我正在使用 Elasticsearch 并尝试想出一种基于短语过滤文本字段的方法。我有基本的搜索工作,但我也想折叠“类似”的结果而不是复制它们。

例如,给定 5 个具有文本内容的对象

  • 三月前买一车送一车
  • 四月前买一车送一车
  • 通过我们购买汽车保险可享受 50% 的折扣
  • 烤箱立减 50%

如果搜索 car 那么我会寻找 2 个结果:

  • 50% 的汽车保险折扣 [...]
  • 第一个或第二个(均显示在 inner_hits 中)

我已经尝试在 content 字段上使用折叠来做到这一点,但这只会在完全匹配时折叠。

    'query' => [
        'match' => [
            'content' => 'car',
        ],
    ],
    'collapse' => [
        'field' => 'content',
        'inner_hits' => [
            'name' => 'recently_seen_on',
            'size' => 3,
            'sort' => [['seen_on' => 'desc']],
         ],
     ],

我还尝试在 content 字段中添加一个相似性属性,但我不知道是否可以使用它来折叠。

我也遇到过这个 https://www.elastic.co/guide/en/elasticsearch/reference/master/search-aggregations-bucket-significanttext-aggregation.html 但是当我尝试类似的东西时我得到了 0 结果。我在映射中将 content 类型设置为 keywords

[
    'content' => ['type' => 'keyword'],
]

然后使用:

'query' => [
    'match' => [
        'content' => 'car',
    ],
],
'aggs' => [
    'keywords' => [
        'significant_text' => [
            'field' => 'content',
            'filter_duplicate_text' => true,
        ],
    ],
],

是否可以在不添加根据内容手动对字段进行分组的字段的情况下实现这样的目标?

0 个答案:

没有答案
相关问题