@Search
    public Observation search(
        @RequiredParam(name = "subject") ReferenceParam theSubject,
        @RequiredParam(name = "name") TokenOrListParam theName) {
      Observation o = new Observation();
      o.setId("1");

      o.getSubject().setReference(theSubject.getResourceType() + "/" + theSubject.getIdPart());
      for (BaseCodingDt next : theName.getListAsCodings()) {
        o.getName().getCoding().add(new CodingDt(next));
      }

      return o;
    }
  @Test
  public void testSearchGetWithUnderscoreSearch() throws Exception {
    HttpGet httpGet =
        new HttpGet(
            "http://localhost:"
                + ourPort
                + "/Observation/_search?subject%3APatient=100&name=3141-9%2C8302-2%2C8287-5%2C39156-5");

    HttpResponse status = ourClient.execute(httpGet);
    String responseContent = IOUtils.toString(status.getEntity().getContent());
    IOUtils.closeQuietly(status.getEntity().getContent());

    assertEquals(200, status.getStatusLine().getStatusCode());
    Bundle bundle = ourCtx.newXmlParser().parseBundle(responseContent);
    assertEquals(1, bundle.getEntries().size());

    Observation p = bundle.getResources(Observation.class).get(0);
    assertEquals("Patient/100", p.getSubject().getReference().toString());
    assertEquals(4, p.getName().getCoding().size());
    assertEquals("3141-9", p.getName().getCoding().get(0).getCode().getValue());
    assertEquals("8302-2", p.getName().getCoding().get(1).getCode().getValue());
  }