私は ElasticSearch 5.0 をテストしていますが、ここで明らかな何かが欠けているようです。
以前の 1.x バージョンでは、電子メールのようなフィールドを持つドキュメントを保存する場合、マッピングで分析対象フィールドを「not_analyzed」に設定し、電子メールでドキュメントを検索していました。
バージョン 5 ではまだできません。マッピングを設定します。
{
"mappings": {
"simple_strings": {
"dynamic_templates": [
{
"strings_not_analyzed": {
"match_mapping_type": "string",
"mapping": {
"type": "keyword"
}
}
}
]
}
}
}
そして、書類を保管します。index/_search を取得すると、次のようになります。
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "common",
"_type": "user",
"_id": "d5eddb47-ca69-4fdd-838a-9663e8867e0b",
"_score": 1,
"_source": {
"tenant": "s2auth",
"connection": "Username-Password-Authentication",
"email": "foo@bar.com",
"password": "foobar",
"debug": true,
"id": "d5eddb47-ca69-4fdd-838a-9663e8867e0b"
}
}
]
}
}
しかし、このクエリを POST すると:
{
"query": {
"bool": {
"filter": {
"term": {
"email": "foo@bar.com"
}
}
}
}
}
私は何も得ません。
ES 1.x で使用したデフォルトのマッピング動作を複製する必要があるだけです。
{
"mappings": {
"_default_": {
"dynamic_templates": [
{ "notanalyzed": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"type": "string",
"index": "not_analyzed"
}
}
}
]
}
}
}
マッピング定義が間違っているか、検索クエリが間違っているか、それとも何ですか?