Esempio n. 1
0
  /**
   * Get a document field raw value or list of raw values.
   *
   * <pre><code>
   *      assert document.title = "Big bad wolf"
   *      assert document.keyword[0] == "wolf"
   *      assert document.keyword[1] == "red hook"
   * </code></pre>
   *
   * @param document the document
   * @param fieldName the field name
   * @return a raw value or a list of raw values if the field is multivalued
   */
  public static Object get(Document document, String fieldName) {
    @SuppressWarnings("unchecked")
    List<Field> fields = (List<Field>) DefaultGroovyMethods.collect(document.getFields(fieldName));

    switch (fields.size()) {
      case 0:
        if (document instanceof ScoredDocument) {
          List<Object> exps = new ArrayList<Object>();
          for (Field f : ((ScoredDocument) document).getExpressions()) {
            if (f.getName().equals(fieldName)) {
              exps.add(getFieldRawValue(f));
            }
          }

          if (exps.size() == 0) {
            return null;
          }
          if (exps.size() == 1) {
            return exps.get(0);
          }
          return exps;
        }
        return null;
      case 1:
        return getFieldRawValue(fields.get(0));
      default:
        List<Object> exps = new ArrayList<Object>();
        for (Field f : fields) {
          exps.add(getFieldRawValue(f));
        }
        return exps;
    }
  }