我创建了一个带有映射的索引,该映射包含带有下面命令的字段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"
,否则我认为不应该找到它。
答案 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。