It looks like you indexed your city names using analysis. This will complicate the situation. In the analysis, “new” and “business” are separate terms and should be considered as such. Finding multiple terms using lookups like this is usually a little more complicated.
The easiest solution is to index your city names without tokenization (a lower scale may not be a bad idea). Then you can search using the query parser simply by escaping the space:
QueryParser parser = new QueryParser("defaultField", analyzer);
Query query = parser.parse("cityname:new\\ del*");
Or you can use simple WildcardQuery:
Query query = new WildcardQuery(new Term("cityname", "new del*"));
When analyzing a field with a standard analyzer:
You will need to rely on SpanQueries, something like this:
SpanQuery queryPart1 = new SpanTermQuery(new Term("cityname", "new"));
SpanQuery queryPart2 = new SpanMultiTermQueryWrapper(new WildcardQuery(new Term("cityname", "del*")));
Query query = new SpanNearQuery(new SpanQuery[] {query1, query2}, 0, true);
( , ), W(new, del*):
org.apache.lucene.queryparser.surround.parser.QueryParser surroundparser = new org.apache.lucene.queryparser.surround.parser.QueryParser();
SrndQuery srndquery = surroundparser.parse("W(new, del*)");
query = srndquery.makeLuceneQueryField("cityname", new BasicQueryFactory());