@Test
  @Category(
      ElasticsearchSupportInProgress
          .class) // HSEARCH-2428 Provide an alternative to
                  // org.hibernate.search.analyzer.Discriminator for Elasticsearch?
  public void testAnalyzerDiscriminator() throws Exception {
    FullTextSession s = Search.getFullTextSession(openSession());
    Transaction tx = s.beginTransaction();

    BlogEntry deEntry = new BlogEntry();
    deEntry.setTitle("aufeinanderschl\u00FCgen");
    deEntry.setDescription("aufeinanderschl\u00FCgen");
    deEntry.setLanguage("de");
    s.persist(deEntry);

    BlogEntry enEntry = new BlogEntry();
    enEntry.setTitle("acknowledgment");
    enEntry.setDescription("acknowledgment");
    enEntry.setLanguage("en");
    s.persist(enEntry);

    tx.commit();

    s.clear();

    tx = s.beginTransaction();

    // at query time we use a standard analyzer. We explicitly search for tokens which can only be
    // found if the
    // right language specific stemmer was used at index time
    assertEquals(1, nbrOfMatchingResults("description", "aufeinanderschlug", s));
    assertEquals(1, nbrOfMatchingResults("description", "acknowledg", s));
    assertEquals(0, nbrOfMatchingResults("title", "aufeinanderschlug", s));
    assertEquals(1, nbrOfMatchingResults("title", "acknowledgment", s));

    for (Object result : s.createQuery("from " + BlogEntry.class.getName()).list()) {
      s.delete(result);
    }
    tx.commit();
    s.close();
  }
  @Test
  public void testDateBridgeMapping() throws Exception {
    FullTextSession s = Search.getFullTextSession(openSession());
    Transaction tx = s.beginTransaction();

    Address address = new Address();
    address.setStreet1("Peachtree Rd NE");
    address.setStreet2("Peachtnot Rd NE");
    Calendar c =
        GregorianCalendar.getInstance(
            TimeZone.getTimeZone("GMT"), Locale.ROOT); // for the sake of tests
    c.set(2009, Calendar.NOVEMBER, 15);

    Date date = new Date(c.getTimeInMillis());
    address.setDateCreated(date);
    s.persist(address);

    address = new Address();
    address.setStreet1("Peachtnot Rd NE");
    address.setStreet2("Peachtree Rd NE");
    address.setDateCreated(date);
    s.persist(address);

    BlogEntry enEntry = new BlogEntry();
    enEntry.setTitle("acknowledgment");
    enEntry.setDescription("acknowledgment");
    enEntry.setLanguage("en");
    enEntry.setDateCreated(date);
    s.persist(enEntry);

    tx.commit();

    s.clear();

    tx = s.beginTransaction();

    long searchTimeStamp = DateTools.round(date.getTime(), DateTools.Resolution.DAY);
    BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder();
    booleanQueryBuilder.add(
        NumericRangeQuery.newLongRange(
            "date-created", searchTimeStamp, searchTimeStamp, true, true),
        BooleanClause.Occur.SHOULD);
    booleanQueryBuilder.add(
        NumericRangeQuery.newLongRange(
            "blog-entry-created", searchTimeStamp, searchTimeStamp, true, true),
        BooleanClause.Occur.SHOULD);

    FullTextQuery query =
        s.createFullTextQuery(booleanQueryBuilder.build())
            .setProjection(FullTextQuery.THIS, FullTextQuery.SCORE);
    assertEquals("expecting 3 results", 3, query.getResultSize());

    @SuppressWarnings("unchecked")
    List<Object[]> results = query.list();

    for (Object[] result : results) {
      s.delete(result[0]);
    }
    tx.commit();
    s.close();
  }