如何在Elasticsearch中突出显示日期字段?

时间:2015-08-13 09:55:33

标签: elasticsearch highlighting

我的映射:

"mappings": {
     "my_type": {
        "properties": {
           "birthDate": {
              "type": "date",
              "format": "dateOptionalTime"
           },
           "name": {
              "type": "string"
           }
        }
     }
}

我的搜索查询:

GET my_index/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "babken"
          }
        },
        {
          "term": {
            "birthDate": {
              "value": "1999-01-01"
            }
          }
        }
      ]
    }
  },
  "highlight": {
    "fields": {
      "*": {}
    }
  }
}

但是在响应正文中,只有name字段会突出显示,即使birthDate字段也匹配了:

"hits": [
         {
            "_index": "my_index",
            "_type": "my_type",
            "_id": "1a82fbb4-1268-42b9-9999-ef932f67a114",
            "_score": 12.507131,
            "_source": {
               "name": "babken",
               "birthDate": "1999-01-01",
            },
            "highlight": {
               "name": [
                  "<em>babken</em>"
               ]
            }
         }
         ...

如果birthDate字段匹配,我怎样才能使public static JsonParser parser = new JsonParser(); public static void main(String args[]) { writeJson("JsonFile.json"); readgson("JsonFile.json"); } public static void readgson(String file) { try { System.out.println( "Reading JSON file from Java program" ); FileReader fileReader = new FileReader( file ); com.google.gson.JsonObject object = (JsonObject) parser.parse( fileReader ); Set <java.util.Map.Entry<String, com.google.gson.JsonElement>> keys = object.entrySet(); if ( keys.isEmpty() ) { System.out.println( "Empty JSON Object" ); }else { Map<String, Object> map = json_UnKnown_Format( keys ); System.out.println("Json 2 Map : "+map); } } catch (IOException ex) { System.out.println("Input File Does not Exists."); } } public static Map<String, Object> json_UnKnown_Format( Set <java.util.Map.Entry<String, com.google.gson.JsonElement>> keys ){ Map<String, Object> jsonMap = new HashMap<String, Object>(); for (Entry<String, JsonElement> entry : keys) { String keyEntry = entry.getKey(); System.out.println(keyEntry + " : "); JsonElement valuesEntry = entry.getValue(); if (valuesEntry.isJsonNull()) { System.out.println(valuesEntry); jsonMap.put(keyEntry, valuesEntry); }else if (valuesEntry.isJsonPrimitive()) { System.out.println("P - "+valuesEntry); jsonMap.put(keyEntry, valuesEntry); }else if (valuesEntry.isJsonArray()) { JsonArray array = valuesEntry.getAsJsonArray(); List<Object> array2List = new ArrayList<Object>(); for (JsonElement jsonElements : array) { System.out.println("A - "+jsonElements); array2List.add(jsonElements); } jsonMap.put(keyEntry, array2List); }else if (valuesEntry.isJsonObject()) { com.google.gson.JsonObject obj = (JsonObject) parser.parse(valuesEntry.toString()); Set <java.util.Map.Entry<String, com.google.gson.JsonElement>> obj_key = obj.entrySet(); jsonMap.put(keyEntry, json_UnKnown_Format(obj_key)); } } return jsonMap; } @SuppressWarnings("unchecked") public static void writeJson( String file ) { JSONObject json = new JSONObject(); json.put("Key1", "Value"); json.put("Key2", 777); // Converts to "777" json.put("Key3", null); json.put("Key4", false); JSONArray jsonArray = new JSONArray(); jsonArray.put("Array-Value1"); jsonArray.put(10); jsonArray.put("Array-Value2"); json.put("Array : ", jsonArray); // "Array":["Array-Value1", 10,"Array-Value2"] JSONObject jsonObj = new JSONObject(); jsonObj.put("Obj-Key1", 20); jsonObj.put("Obj-Key2", "Value2"); jsonObj.put(4, "Value2"); // Converts to "4" json.put("InnerObject", jsonObj); JSONObject jsonObjArray = new JSONObject(); JSONArray objArray = new JSONArray(); objArray.put("Obj-Array1"); objArray.put(0, "Obj-Array3"); jsonObjArray.put("ObjectArray", objArray); json.put("InnerObjectArray", jsonObjArray); Map<String, Integer> sortedTree = new TreeMap<String, Integer>(); sortedTree.put("Sorted1", 10); sortedTree.put("Sorted2", 103); sortedTree.put("Sorted3", 14); json.put("TreeMap", sortedTree); try { System.out.println("Writting JSON into file ..."); System.out.println(json); FileWriter jsonFileWriter = new FileWriter(file); jsonFileWriter.write(json.toJSONString()); jsonFileWriter.flush(); jsonFileWriter.close(); System.out.println("Done"); } catch (IOException e) { e.printStackTrace(); } } 字段显示在“突出显示”结果中?

我正在使用Elasticsearch 1.6

1 个答案:

答案 0 :(得分:1)

您需要将类型更改为string以启用突出显示。

要为突出显示启用字段的最低要求是string类型。

以下issue对它的讨论不多。