Search code examples
elasticsearchspring-dataspring-data-elasticsearch

Spring Data api (Containing or startwith) not working with SPACE which has wildcard


I am using Elastic Search with Spring Data .

I have a simple method in repository:

findByUserNameContaining("a b");

This method not giving expecting result because of SPACE.

Error getting:

"Cannot constructQuery '"a b"'. Use expression or multiple clauses instead." EXCEPTION="org.springframework.dao.InvalidDataAccessApiUsageException: Cannot constructQuery '"a b"'. Use expression or multiple clauses instead.

For stopping creation of multiple tokens because of Space. I have mapping:

"userName": {
    "type": "string",
    "index": "not_analyzed"
},

I am totally surprised that I am getting this issue after "index": "not_analyzed" in mapping .

Please help me. Thanks in advance!


Solution

  • Actually Spring data apis (containing or startWith) does not work with space in String . I have implemented same with Elastic core api.

    NativeSearchQueryBuilder aNativeSearchQueryBuilder = new NativeSearchQueryBuilder();
            aNativeSearchQueryBuilder.withIndices(indexName).withTypes(type);
            final BoolQueryBuilder aQuery = new BoolQueryBuilder();
    
                aQuery.must(QueryBuilders.queryStringQuery("a b").defaultField("UserName"));
    
    NativeSearchQuery nativeSearchQuery = aNativeSearchQueryBuilder.withQuery(aQuery).build();
            List<Object> aDatas = elasticsearchTemplate.queryForList(nativeSearchQuery, Object.class);