【问题标题】:How can I make ElasticSearch yield just the first couple of words for a field?我怎样才能让 ElasticSearch 只产生一个字段的前几个单词?
【发布时间】:2019-11-04 17:52:28
【问题描述】:

我正在使用 ElasticSearch 来查询一组相当长的文档。每个文档都有(除其他外)标题、URL 和正文。

在向用户展示结果时,我只想展示每个文档的“摘要”(连同标题和 URL)。但是,仅返回整个主体以在客户端对其进行修剪似乎很浪费。

唉,我没有专门的“抽象”字段等。因此我想知道:有没有办法让 ElasticSearch 只为每次点击产生“body”字段的开头(例如前 200 个单词)?我查看了source filtering(我已经在我的查询中使用它),但这似乎只是选择/取消选择响应的单个字段。我宁愿寻找一种方法来转换返回的数据。

【问题讨论】:

标签: elasticsearch


【解决方案1】:

看来Script Fields 是解决此问题的一种方法。这是一个示例查询,它获取每个文档的titleuri 和一个脚本化的(!)abstract 字段。 abstract 由实际 content 字段的前 200 个字母组成:

{
    "query": {
        "match": {
            "title": "Scripting"
        },
    },
    "_source": ["title", "uri"],
    "script_fields": {
        "abstract": {
            "script": {
                "lang": "painless",
                "source": "params['_source'].content.substring(0, 200)"
            }
        }
    }
}

【讨论】:

  • 我花了一段时间才弄清楚计算字段的术语。我期待像 computedderived 这样的名称,但 script 不太直观。也许这个 cmets 也可以帮助其他人找到这个帖子 :-)
猜你喜欢
  • 2021-12-21
  • 2014-01-02
  • 2021-10-26
  • 2019-02-18
  • 2019-11-19
  • 2021-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多