大文字と小文字を区別して一致する名前を見つけようとしています。以下のコードを試したところ、大文字と小文字を区別しないため、期待どおりに機能しました。
HashMap<String, String> data = new HashMap<String, String>();
data.put("GroupId", "3");
data.put("GroupName", "testGroup three");
data.put("CreatedDateTime", "20180115130026757+0000");
data.put("UpdatedDateTime", "20180115130026757+0000");
data.put("Createdby", "3");
data.put("GroupUser", "{1,2,3,4}");
data.put("status", "active");
String mapping = {"typename":{"properties":{
"GroupName":{"type":"text","index":"not_analyzed"},
"Createdby":{"type":"text","index":"not_analyzed"},
"GroupUser":{"type":"text","index":"not_analyzed"},
"UpdatedDateTime":{"type":"text","index":"not_analyzed"},
"CreatedDateTime":{"type":"text","index":"not_analyzed"},
"GroupId":{"type":"text","index":"not_analyzed"},
"status":{"type":"text","index":"not_analyzed"}}}}
client = new PreBuiltTransportClient(settings).addTransportAddresses(new TransportAddress(new InetSocketAddress(ipaddress, port)));
//inserting record
IndexResponse response = client.prepareIndex(indexName, typeName).setSource(data).get();
//inserting mapping
client.admin().indices().preparePutMapping(indexName)
.setType("typeName")
.setSource(mapping, XContentType.JSON)
.get();
大文字と小文字を区別する値を見つけるには、インデックスを not_analyzed として使用することがわかりました。私は次のことを試しました
HashMap<String, String> data = new HashMap<String, String>();
data.put("GroupId", "3");
data.put("GroupName", "testGroup three");
data.put("CreatedDateTime", "20180115130026757+0000");
data.put("UpdatedDateTime", "20180115130026757+0000");
data.put("Createdby", "3");
data.put("GroupUser", "{1,2,3,4}");
data.put("status", "active");
String mapping = {"typename":{"properties":{
"GroupName":{"type":"text","index":"not_analyzed"},
"Createdby":{"type":"text","index":"not_analyzed"},
"GroupUser":{"type":"text","index":"not_analyzed"},
"UpdatedDateTime":{"type":"text","index":"not_analyzed"},
"CreatedDateTime":{"type":"text","index":"not_analyzed"},
"GroupId":{"type":"text","index":"not_analyzed"},
"status":{"type":"text","index":"not_analyzed"}}}}
client = new PreBuiltTransportClient(settings).addTransportAddresses(new TransportAddress(new InetSocketAddress(ipaddress, port)));
//inserting record
IndexResponse response = client.prepareIndex(indexName, typeName).setSource(data).get();
//inserting mapping
client.admin().indices().preparePutMapping(indexName)
.setType("typeName")
.setSource(mapping, XContentType.JSON)
.get();
以下に示すように例外が発生しています
java.lang.IllegalArgumentException: Could not convert [GroupName.index] to boolean
以下の2つのシナリオを達成したい:
1. Find by case sensitive
2. Find by case insensitive.
エラスティック検索のバージョンは 6.1.2 です。
どんな助けでも本当に感謝しています。
更新-1
@Val に従って、コードを次のように変更しました。
HashMap<String, String> data = new HashMap<String, String>();
data.put("GroupId", "3");
data.put("GroupName", "testGroup three");
data.put("CreatedDateTime", "20180115130026757+0000");
data.put("UpdatedDateTime", "20180115130026757+0000");
data.put("Createdby", "3");
data.put("GroupUser", "{1,2,3,4}");
data.put("status", "active");
String mapping = {"typename":{"properties":{
"GroupName":{"type":"keyword"},
"Createdby":{"type":"keyword"},
"GroupUser":{"type":"keyword"},
"UpdatedDateTime":{"keyword":"text"},
"CreatedDateTime":{"keyword":"text"},
"GroupId":{"type":"keyword"},
"status":{"type":"keyword"}}}}
client = new PreBuiltTransportClient(settings).addTransportAddresses(new TransportAddress(new InetSocketAddress(ipaddress, port)));
client.admin().indices().prepareCreate("indexName").get();
//inserting mapping
client.admin().indices().preparePutMapping(indexName)
.setType("typeName")
.setSource(mapping, XContentType.JSON)
.get();
//inserting record
IndexResponse response = client.prepareIndex(indexName, typeName).setSource(data).get();
挿入できるようになりました。しかし、GroupName の値を検索すると、結果は空です。