Java弹性搜索:荧光笔无法正常工作

时间:2017-09-01 03:20:55

标签: java elasticsearch highlight

我正在使用Java API for ElasticSearch。我试图突出我的领域,但它不起作用。正在返回与搜索词匹配的正确结果,因此有内容要突出显示,但它根本不会这样做。我将SearchResponse和HighlightBuilder设置为:

    QueryBuilder matchQuery = simpleQueryStringQuery(searchTerm);
    ...
    HighlightBuilder highlightBuilder = new HighlightBuilder()
            .postTags("<highlight>")
            .preTags("</highlight>")
            .field("description");

    SearchResponse response = client.prepareSearch("mediaitems")
            .setTypes("mediaitem")
            .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
            .setQuery(matchQuery)                 // Query
            .setFrom(from)
            .setSize(pageSize)
            .setExplain(true)
            .highlighter(highlightBuilder)
            .get();

在我的JSON-&gt; POJO代码中,我检查哪些字段已突出显示,但返回的地图为空。

    Arrays.stream(hits).forEach((SearchHit hit) -> {
        String source = hit.getSourceAsString();
        Map<String, HighlightField> highlightFields = hit.getHighlightFields();
        try {
            MediaItem mediaItem = objectMapper.readValue(source, MediaItem.class);
            mediaItemList.add(mediaItem);
        } catch (IOException e) {
            e.printStackTrace();
        }
    });

为什么我的突出显示请求会被忽略?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您必须在HighlightBuilder中设置突出显示的字段。

例如:

HighlightBuilder.Field field = new HighlightBuilder.Field(fieldName);
highlightBuilder.field(field);

我看到您使用简单的查询字符串查询,因此您可以执行以下操作:

Your query string: fieldname: searched text

例如,您的查询字符串如下:

price: >2000 && city: Manchaster

使用此查询字符串,您也可以在查询中指定字段。 现在荧光笔应该可以工作。