簡體   English   中英

用標簽包圍多個單詞 - Java中的ElasticSearch Highlighter

[英]Surrounding multiple words with tags - ElasticSearch Highlighter in Java

使用突出顯示執行ElasticSearchs查詢時,是否可以使用突出顯示標記包圍多個單詞?

例如,當我執行查詢“ajax basics”時,我得到:

someText... <a href='#' class='highlightedTerm'>ajax</a> <a href='#' class='highlightedField'>basics</a> someText...

這就是我想得到的:

someText... <a href='#' class='highlightedTerm'>ajax basics</a> someText...

我正在使用這些設置進行熒光筆和查詢:

SearchResponse response = getClient().prepareSearch("user")
    .setTypes("document")
    .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
    .setPostFilter(privacyFilter)
    .setQuery(qb)
    .setFrom(first)
    .setSize(pageSize)
    .setExplain(true)
    //
    // Highlight
    .addHighlightedField("fileName")
    .addHighlightedField("content")
    .setHighlighterOptions(highlighterOptions)
    .setHighlighterPreTags("<a href='#' class='highlightedTerm'>")
    .setHighlighterPostTags("</a>")
    // -------------------------------------
    //
    .addFields("*", "_source")
    .execute()
    .actionGet();

我試圖從邊界字符中刪除空格

Map<String, Object> highlighterOptions = new HashMap<>();
highlighterOptions.put("boundary_chars", "s.,!?\\t\\n");

但是,結果是一樣的。

謝謝

弗拉基米爾

我發現了什么問題。 我使用普通熒光筆而不是快速矢量熒光筆 只需添加快速矢量熒光筆解決了我的問題。

為了啟用快速矢量熒光筆 ,我添加了我執行搜索的類型的特定映射

確切地說,我補充道

.field("term_vector", "with_positions_offsets")

在我想要突出顯示的領域。

// Create mapping
XContentBuilder xb = XContentFactory.jsonBuilder()
        .startObject()
        .startObject("document")
        // - document
        .startObject("properties")
        // - properties
        //
        .startObject("content")
        .field("type", "string")
        .field("term_vector", "with_positions_offsets")
        .endObject()
        //
        //
        .startObject("contentType")
        .field("type", "string")
        .endObject()
        //
        //
        .startObject("fileName")
        .field("type", "string")
        .endObject()
        //
        //
        .startObject("fileSize")
        .field("type", "long")
        .endObject()
        //
        //
        .startObject("openable")
        .field("type", "string")
        .endObject()
        //
        //
        .startObject("ownerUserId")
        .field("type", "string")
        .endObject()
        //
        //
        .startObject("privacy")
        .field("type", "string")
        .endObject()
        //
        //
        .startObject("searchable")
        .field("type", "string")
        .endObject()
        //
        // - end properties
        .endObject()
        // - end document
        .endObject()
        .endObject();

// Prepare mapping
PutMappingRequestBuilder pmrb = client.admin().indices()
        .preparePutMapping("user")
        .setType("document");

pmrb.setSource(xb);

// Create type and mapping
PutMappingResponse response = pmrb.execute().actionGet();
if (!response.isAcknowledged()) {
    LOG.info("Error while creating mapping for user document.");
} else {
    LOG.info("Mapping created for user document.");
}

關於該主題的一些信息: 鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM