Elasticseach-强制字段仅索引,避免存储

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticseach-强制字段仅索引,避免存储相关的知识,希望对你有一定的参考价值。

我如何强制仅对字段建立索引而不存储数据。该选项在Solr中可用,不确定在Elasticseach中是否可行。

答案

来自document

默认情况下,对字段值进行索引以使其可搜索,但它们却不存储。这意味着可以查询该字段,但是无法检索原始字段值。通常这无关紧要。栏位值已经是_source字段,默认情况下存储。如果您只想检索单个字段或几个字段的值,而不是整个_source,那么可以通过源过滤实现

[如果您也不希望字段也存储在_source中。您可以在映射中从源中排除该字段

映射:

{
  "mappings": {
    "properties": {
      "title":{
        "type":"text"
      },
      "description":{
        "type":
      }
    }, 
    "_source": {
      "excludes": [
        "description"
      ]
    }
  }
}

查询:

GET logs/_search
{
  "query": {
    "match": {
      "description": "b" --> field description is searchable(indexed)
    }
  }
}

结果:

"hits" : [
      {
        "_index" : "logs",
        "_type" : "_doc",
        "_id" : "-aC9V3EBkD38P4LIYrdY",
        "_score" : 0.2876821,
        "_source" : {
          "title" : "a" --> field "description" is not returned
        }
      }
    ]

注意:

从源中删除字段将导致以下问题

  1. 更新,update_by_query和重新索引API。

  2. 动态突出显示。

  3. 从一个Elasticsearch索引重新索引到另一个索引的能力,以更改映射或分析,或将索引升级到新的主要版本。

  4. 通过查看索引时使用的原始文档调试查询或聚合的功能。

  5. 将来有可能自动修复索引损坏。

以上是关于Elasticseach-强制字段仅索引,避免存储的主要内容,如果未能解决你的问题,请参考以下文章

sphinx和elasticseach使用感受

SpringBoot集成Elasticseach

仅存储在 Elastic AppSearch/Enterprise Search 中

MySQL调优

Lucene字段

分享一篇阿里的mysql规范