在弹性搜索中的某些字段上禁用搜索

时间:2020-09-29 05:59:05

标签: python amazon-web-services elasticsearch

我只想在一个字段“ XYZ”中进行搜索。我正在使用下面的代码,但这给了我错误。你能帮我吗?

{
  "dynamic": "false",
  "properties": {
    "ABC": {
      "type": "text",
      "index": false,
      "store": true
      
    },
    "PQR": {
      "type": "text",
       "index": false,
      "store": true
    },
    "XYZ": {
      "type": "text"
    }
  }
}

P.S。我希望将字段“ ABC”和“ PQR”存储在弹性搜索中,但我也想禁用对这些字段的搜索。

3 个答案:

答案 0 :(得分:0)

您可以使用enabled mapping parameter

已启用的设置,仅可应用于顶层 映射定义和对象字段,导致Elasticsearch跳过 完全解析该字段的内容。 JSON仍可以是 从_source字段检索,但不可搜索或存储 以任何其他方式:

索引映射:

{
  "mappings": {
    "properties": {
      "ABC": {
        "enabled":false
      },
      "PQR": {
        "enabled":false
      },
      "XYZ": {
        "type": "text"
      }
    }
  }
}

索引数据:

{
    "ABC": "b",
    "PQR": "c",
    "XYZ": "a"
}

搜索查询: 在PQR字段中搜索时,没有搜索结果。

{
  "query": {
    "match": {
      "PQR": {
        "query": "c"
      }
    }
  }
}

搜索结果:

"hits": {
    "total": {
      "value": 0,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  }

搜索查询:

{
  "query": {
    "match": {
      "XYZ": {
        "query": "a"
      }
    }
  }
}

搜索结果:

"hits": [
      {
        "_index": "stof_64113718",
        "_type": "_doc",
        "_id": "1",
        "_score": 0.13353139,
        "_source": {
          "ABC": "b",
          "PQR": "c",
          "XYZ": "a"
        }
      }
    ]

答案 1 :(得分:0)

好像您正在获得以下例外:

“原因”:“无法创建查询:由于以下原因,无法在字段[PQR]上进行搜索 它没有索引。”,

其正确性(如要搜索)需要建立索引,这由您设置为false的索引参数控制

您当前的设置是正确的,您需要从搜索查询中排除未编入索引的字段,这是一种非常常见的模式,随后是许多应用程序,否则,您可以按照Bhavya的回答进行操作,但是这些字段将被存储作为_source的一部分,并确保未禁用它(默认情况下已启用)。

答案 2 :(得分:0)

我相信您没有正确使用语法:

PUT indexName
{
  "mappings": { // <=============== This is missing
    "dynamic": false,
    "properties": {
      "ABC": {
        "type": "text", //<============= If type is object, use 'enabled' instead of 'index' 
        "index": false, 
        "store": true
      },
      "PQR": {
        "type": "text",
        "index": false,
        "store": true
      },
      "XYZ": {
        "type": "text"
      }
    }
  }
}

注意:

  1. enabled = false通常用于类型为object的字段

  2. index = false与文本等预定义类型一起使用

  3. 两个index = false和enabled = false都将使该字段不可索引,但是该字段仍将保留在_source中。

  4. 对于index = false的字段,在这些字段上的任何搜索请求都将导致以下错误:

     Cannot search on-field [xyz] since it is not indexed
    
  5. 对于任何字段(类型=对象),如果其中启用=假,则对这些字段的任何搜索请求都不会导致任何错误。