@Test @SuppressWarnings("unchecked") public void testBoostQuery() { try ( Session session = openSession() ) { FullTextSession fullTextSession = Search.getFullTextSession( session ); TermQuery termQuery = new TermQuery( new Term( "message", "import" ) ); termQuery.setBoost( 3.0f ); BoostQuery testedQuery = new BoostQuery( termQuery, 2.0f ); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( testedQuery, Letter.class ); String queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'bool':{'must':{'term':{'message':{'value':'import','boost':3.0}}},'boost':2.0}}}", queryString ); List<Letter> letters = fullTextQuery.list(); assertThat( letters ).hasSize( 1 ); assertThat( letters ).extracting( "message" ).containsExactly( "Important letter" ); } }
@Test @SuppressWarnings("unchecked") public void testPhraseQueryWithoutAnalyzer() { try ( Session session = openSession() ) { FullTextSession fullTextSession = Search.getFullTextSession( session ); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( new PrefixQuery( new Term( "message", "import" ) ), Letter.class ); String queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'prefix':{'message':{'value':'import'}}}}", queryString ); List<Letter> letters = fullTextQuery.list(); assertThat( letters ).hasSize( 1 ); assertThat( letters ).extracting( "message" ).containsExactly( "Important letter" ); } }
@Test public void testDSLKeywordDate() throws Exception { try ( Session session = openSession() ) { FullTextSession fullTextSession = Search.getFullTextSession( session ); final QueryBuilder queryBuilder = queryBuilder( fullTextSession ); Calendar date = Calendar.getInstance( TimeZone.getTimeZone( "UTC" ), Locale.ENGLISH ); date.set( 1958, 3, 7, 5, 5, 5 ); date.set( Calendar.MILLISECOND, 0 ); Query query = queryBuilder .keyword() .onField( "dateWritten" ) .matching( date.getTime() ) .createQuery(); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( query, Letter.class ); String queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'term':{'dateWritten':{'value':'1958-04-07T00:00:00Z'}}}}", queryString ); } }
@Test @SuppressWarnings("unchecked") public void testMatchNoDocsQuery() { try ( Session session = openSession() ) { FullTextSession fullTextSession = Search.getFullTextSession( session ); MatchNoDocsQuery testedQuery = new MatchNoDocsQuery(); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( testedQuery, Letter.class ); String queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'type':{'value': '__HSearch_Workaround_MatchNoDocsQuery'}}}", queryString ); List<Letter> letters = fullTextQuery.list(); assertThat( letters ).isEmpty(); } }
@Test @SuppressWarnings("unchecked") public void testCachingWrapperQueryWithBoost() { try ( Session session = openSession() ) { FullTextSession fullTextSession = Search.getFullTextSession( session ); TermQuery termQuery = new TermQuery( new Term( "message", "import" ) ); termQuery.setBoost( 3.0f ); CachingWrapperQuery testedQuery = new CachingWrapperQuery( termQuery ); testedQuery.setBoost( 2.0f ); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( testedQuery, Letter.class ); String queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'bool':{'must':{'term':{'message':{'value':'import','boost':3.0}}},'boost':2.0}}}", queryString ); List<Letter> letters = fullTextQuery.list(); assertThat( letters ).hasSize( 1 ); assertThat( letters ).extracting( "message" ).containsExactly( "Important letter" ); } }
@Test @SuppressWarnings("unchecked") public void testBooleanQueryWithBoost() { try ( Session session = openSession() ) { FullTextSession fullTextSession = Search.getFullTextSession( session ); TermQuery termQuery = new TermQuery( new Term( "message", "import" ) ); termQuery.setBoost( 3.0f ); BooleanQuery testedQuery = new BooleanQuery.Builder().add( termQuery, Occur.SHOULD ).build(); testedQuery.setBoost( 2.0f ); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( testedQuery, Letter.class ); String queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'bool':{'should':{'term':{'message':{'value':'import','boost':3.0}}},'boost':2.0}}}", queryString ); List<Letter> letters = fullTextQuery.list(); assertThat( letters ).hasSize( 1 ); assertThat( letters ).extracting( "message" ).containsExactly( "Important letter" ); } }
@Test public void testDSLKeywordCalendar() throws Exception { try ( Session session = openSession() ) { FullTextSession fullTextSession = Search.getFullTextSession( session ); final QueryBuilder queryBuilder = queryBuilder( fullTextSession ); Calendar calendar = Calendar.getInstance( TimeZone.getTimeZone( "UTC" ), Locale.ENGLISH ); calendar.set( 1958, 3, 7, 5, 5, 5 ); calendar.set( Calendar.MILLISECOND, 0 ); Query query = queryBuilder .keyword() .onField( "dateSent" ) .matching( calendar ) .createQuery(); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( query, Letter.class ); String queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'term':{'dateSent':{'value':'1958-04-07T00:00:00Z'}}}}", queryString ); } }
@Test public void testDSLMatchAll() throws Exception { try ( Session session = openSession() ) { FullTextSession fullTextSession = Search.getFullTextSession( session ); final QueryBuilder queryBuilder = queryBuilder( fullTextSession ); Query query = queryBuilder .all() .createQuery(); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( query, Letter.class ); String queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'match_all':{}}}", queryString ); } }
@Test public void testDSLKeywordBoolean() throws Exception { try ( Session session = openSession() ) { FullTextSession fullTextSession = Search.getFullTextSession( session ); final QueryBuilder queryBuilder = queryBuilder( fullTextSession ); Query query = queryBuilder .keyword() .onField( "personal" ) .matching( true ) .createQuery(); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( query, Letter.class ); String queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'term':{'personal':{'value':'true'}}}}", queryString ); } }
@Test public void testDSLKeywordFloat() throws Exception { try ( Session session = openSession() ) { FullTextSession fullTextSession = Search.getFullTextSession( session ); final QueryBuilder queryBuilder = queryBuilder( fullTextSession ); Query query = queryBuilder .keyword() .onField( "shippingCost" ) .matching( 0.40f ) .createQuery(); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( query, Letter.class ); String queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'range':{'shippingCost':{'gte':0.4,'lte':0.4}}}}", queryString ); } }
@Test public void testDSLPhraseQueryWithoutAnalyzer() { try ( Session session = openSession() ) { FullTextSession fullTextSession = Search.getFullTextSession( session ); final QueryBuilder queryBuilder = queryBuilder( fullTextSession ); Query query = queryBuilder .phrase() .onField( "signature" ) .sentence( "Gunnar Morling" ) .createQuery(); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( query, Letter.class ); String queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'match_phrase':{'signature':{'query':'Gunnar Morling'}}}}", queryString ); } }
@Test public void testDSLKeywordIgnoringAnalyzer() throws Exception { try ( Session session = openSession() ) { FullTextSession fullTextSession = Search.getFullTextSession( session ); final QueryBuilder queryBuilder = queryBuilder( fullTextSession ); Query query = queryBuilder .keyword() .onField( "message" ) .ignoreAnalyzer() .matching( "A very important matter" ) .createQuery(); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( query, Letter.class ); String queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'term':{'message':{'value':'A very important matter'}}}}", queryString ); } }
@Test public void testDSLKeywordWithBoost() throws Exception { try ( Session session = openSession() ) { FullTextSession fullTextSession = Search.getFullTextSession( session ); final QueryBuilder queryBuilder = queryBuilder( fullTextSession ); Query query = queryBuilder .keyword() .onField( "message" ) .boostedTo( 2.0f ) .matching( "A very important matter" ) .createQuery(); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( query, Letter.class ); String queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'match':{'message':{'query':'A very important matter','boost':2.0}}}}", queryString ); } }
@Test public void testDSLKeywordWithFuzziness() throws Exception { try ( Session session = openSession() ) { FullTextSession fullTextSession = Search.getFullTextSession( session ); final QueryBuilder queryBuilder = queryBuilder( fullTextSession ); Query query = queryBuilder .keyword() .fuzzy() .withEditDistanceUpTo( 2 ) .onField( "message" ) .matching( "A very important matter" ) .createQuery(); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( query, Letter.class ); String queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'match':{'message':{'query':'A very important matter','fuzziness':2}}}}", queryString ); } }
String queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'match':{'message':{'query':'A very important matter'}}}}", queryString ); queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'match':{'message':{'query':'A very important matter'}}}}", queryString ); queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'match':{'message':{'query':'A very important matter','analyzer':'french'}}}}", queryString );
String queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'match_phrase':{'message':{'query':'A very important matter','slop':2}}}}", queryString ); queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'match_phrase':{'message':{'query':'A very important matter','slop':2}}}}", queryString ); queryString = fullTextQuery.getQueryString(); assertJsonEquals( "{'query':{'match_phrase':{'message':{'query':'A very important matter','slop':2,'analyzer':'french'}}}}", queryString );