Elasticsearch not_analyzed字段仍在搜索中找到

时间:2014-05-29 12:27:28

标签: elasticsearch

我创建了一个带有映射的索引,该映射包含带有下面命令的字段not_analyzed,并使用下一个命令索引文档。

 curl -XPUT localhost:9200/twitter -d '{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
},
"mappings": {
"tweet" : {
    "properties" : {
        "message" : {   "type" : "string", 
                        "index": "not_analyzed"}
    }                      
  }
  }
}'


curl -XPOST 'http://localhost:9200/twitter/tweet?' -d '{
"user" : "kimchy",
"postDate" : "2009-11-15T14:12:12",
"message" : "trying out Elasticsearch"
}
'

我检查了与http://localhost:9200/twitter/_mapping?pretty=true的映射,并输出:

 {
 "twitter" : {
"mappings" : {
  "tweet" : {
    "properties" : {
      "message" : {
        "type" : "string",
        "index" : "not_analyzed"
      },
      "post_date" : {
        "type" : "date",
        "format" : "dateOptionalTime"
      },
      "user" : {
        "type" : "string"
      }
    }
  }
  }
 }
}

最后,当我使用此http://localhost:9200/twitter/tweet/_search?pretty=1&q=trying进行搜索时,它会找到索引文档。这是正常的吗?除非我搜索完整的文字"trying out Elasticsearch",否则我认为不应该找到它。

1 个答案:

答案 0 :(得分:1)

not_analyzed表示它没有进行标记化/其他分析来索引值,但它仍然将完整值存储在Elasticsearch中,并且它可以用作术语查询中的完全匹配。字段值仍然被包含/分析到_all字段并在那里索引,以便可以搜索。

您需要设置"include_in_all": false"index": "no"以禁用该功能。

有关详细信息,请参阅http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-core-types.html