I have an ES domain, from which when I query with the document's emailId
field, I'm not getting any hits. However this field and value exist for a document. For the same document, querying by employeeId
works.
Below is how my index mapping looks like.
{
"properties": {
"employeeId": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"emailId": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
}
}
}
Below is how I'm running the search.
public SearchResponse searchForExactDocument(final String indexName, final Map<String, Object> queryMap)
throws IOException {
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
queryMap.forEach((name, value) -> {
queryBuilder.must(QueryBuilders.termQuery(name, value));
});
return this.executeSearch(indexName, queryBuilder);
}
private SearchResponse executeSearch(final String indexName, final QueryBuilder queryBuilder) throws IOException {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(queryBuilder);
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices(indexName);
searchRequest.source(searchSourceBuilder);
return restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
}
I ran the SearcRequest.source().toString() and below is the source string for the search I get.
{
"query": {
"bool": {
"must": [
{
"term": {
"emailId": {
"value": "21june6lambdatest7@gmail.com",
"boost": 1.0
}
}
}
],
"adjust_pure_negative": true,
"boost": 1.0
}
}
}
below is the document that should get returned, but not getting any hits.
index{
[
person
][
_doc
][
null
],
source[
{
"firstName": "MyEmployee",
"lastName": "June6Test7",
"emailId": "21june6lambdatest7@gmail.com",
"employeeId": "13908528"
}
]
}
I'm finding it very weird that query with employeeId
works fine but emailId
won't work. Any help would be much appreciated.
UPDATE: Following is my index creating method.
public CreateIndexResponse createIndex(final CreateIndexInput createIndexInput) throws IOException {
CreateIndexRequest createIndexRequest = new CreateIndexRequest(createIndexInput.indexName());
Settings.Builder settingsBuilder = Settings.builder();
settingsBuilder.put(NUMBER_OF_SHARDS_KEY, createIndexInput.numOfShards());
settingsBuilder.put(NUMBER_OF_REPLICAS, createIndexInput.numOfReplicas());
settingsBuilder.put("analysis.analyzer.custom_uax_url_email.tokenizer", "uax_url_email");
createIndexInput.mapping().ifPresent(mapping ->
createIndexRequest.mapping(mapping, XContentType.JSON));
createIndexRequest.settings(settingsBuilder.build());
return restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);
}