我正在使用 Elasticsearch 并尝试想出一种基于短语过滤文本字段的方法。我有基本的搜索工作,但我也想折叠“类似”的结果而不是复制它们。
例如,给定 5 个具有文本内容的对象
如果搜索 car
那么我会寻找 2 个结果:
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,
],
],
],
是否可以在不添加根据内容手动对字段进行分组的字段的情况下实现这样的目标?