【发布时间】:2018-02-20 09:53:16
【问题描述】:
我正在尝试查找匹配区分大小写的名称。当我尝试下面的代码时,它按预期工作,不区分大小写。
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
我想完成以下两个场景:
1. Find by case sensitive
2. Find by case insensitive.
弹性搜索版本为 6.1.2。
非常感谢任何帮助。
UPDATE-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 中搜索 a 值时,结果是空的。
【问题讨论】:
-
您也可以用
data变量中的任何内容更新您的问题吗? -
@Val 我已经更新了数据变量的问题。
-
好的,然后在下面尝试我的答案,但请确保先删除您的索引 :-)
标签: java elasticsearch case-sensitive case-insensitive elasticsearch-6