ElasticSearch-将大文本字段保留在所有进程之外,但仍返回结果吗?

时间:2019-07-11 15:43:12

标签: elasticsearch

我们有一个ElasticSearch索引(ES版本6.4.2),其中包含100+百万个文档,每个文档包含大约5个字段。这些字段之一是新闻文章的全文。

问题是,现在,我们在该索引上的搜索需要花费5-6秒钟以上的时间才能返回结果,而我们所有其他索引(典型的结构化记录)都需要不到一秒钟的时间。事实是,我们根本不需要在查询时在包含新闻文本的字段内进行搜索,但我们确实希望在结果中返回该字段。

我在这里假设的是,所有这些新闻文本都在ES缓存中,并且可以满足这些漫长的搜索时间,而这些时间甚至根本不需要,因为我们无需搜索它们。是否有一种方法,因为缺少更好的表达方式,因此将新闻文本字段排除在所有ES进程/缓存之外,但实际上仍在结果中返回该字段?我正在尝试测试提高此索引搜索速度的方法。

1 个答案:

答案 0 :(得分:2)

有两种方法可以解决此问题:

1。。将"index": false设置为不可搜索的字段。阅读this

{
  "fNews": {
    "type": "text",
    "index": false
  }
}

2。。如果您使用query_string查询进行搜索,则设置应在其上进行搜索的字段。假设您有3个字段f1f2fNews,并且您不想在fNews上进行搜索,那么查询将类似于以下内容:

{
  "query": {
    "query_string": {
      "fields": [
        "f1",
        "f2"
      ],
      "query": "some search string"
    }
  }
}