如何在包含空格的字段上将字段设置为not_analyized?

时间:2016-02-22 01:41:33

标签: elasticsearch

我在Elasticsearch索引中有一个'grade'字段,其中包含文本和数字。我已将字段映射设置为'not_analyized'但我无法搜索等级===='第1年'。

我已阅读了文档的finding exact values部分,但它似乎对我不起作用。

创建索引。

curl -XPUT http://localhost:9200/my_test_index

创建映射模板。

curl -XPUT http://localhost:9200/_template/my_test_index_mapping -d '
{
  "template" : "my_test_index",
  "mappings" : {
    "my_type": {
      "properties": {       
        "grade": {
          "type": "string",
          "index": "not_analyzed"
        }
      }      
    }
  }
}
'

创建一些文档。

curl -XPUT 'http://localhost:9200/my_test_index/my_type/1' -d '{
  "title" : "some title",
  "grade" : "Year 1"
}'

curl -XPUT 'http://localhost:9200/my_test_index/my_type/3' -d '{
  "title" : "some title",
  "grade" : "preschool"
}'

查询“Year 1”会返回0结果。

curl -XPOST http://localhost:9200/my_test_index/_search -d '{ 
    "query": { 
        "filtered" : { 
            "filter" : { 
                "term": { 
                    "grade": "Year 1"
                } 
            }
        }
    }
}'

查询'学前班'会返回1个结果。

curl -XPOST http://localhost:9200/my_test_index/_search -d '{ 
    "query": { 
        "filtered" : { 
            "filter" : { 
                "term": { 
                    "grade": "preschool"
                } 
            }
        }
    }
}'

检查映射和“成绩”字段不会显示“not_analyzed”。

curl -XGET http://localhost:9200/my_test_index/_mapping

{
  "my_test_index" : {
    "mappings" : {
      "my_type" : {
        "properties" : {
          "grade" : {
            "type" : "string"
          },
          "title" : {
            "type" : "string"
          }
        }
      }
    }
  }
}

2 个答案:

答案 0 :(得分:1)

模板只会影响新创建的索引。

在创建模板后重新创建索引。

或者,在创建索引时指定映射,而不是将模板依赖于单个索引。

答案 1 :(得分:0)

如果您不想分析字段,可以指定" index" :" not_analyzed"在映射中。然后,您可以根据需要搜索完全匹配。

请参阅:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-core-types.html#string

在您的情况下,请尝试重新创建映射。