当前位置: 首页 > 面试题库 >

在Elasticsearch中突出显示单词的一部分

上官英哲
2023-03-14
问题内容

我已经使用n-
gram标记器在elasticsearch中提出了自动建议。现在,我想在自动建议列表中突出显示用户输入的字符序列。为此,我使用了elasticsearch中可用的荧光笔,我的代码如下所示,但是在输出中,完整的术语被突出显示了我要去哪里了。

{
    "query": {
        "query_string": {
            "query": "soft",
            "default_field": "competency_display_name"
        }
    },
    "highlight": {
        "pre_tags": ["<b>"],
        "post_tags": ["</b>"],
        "fields": {
            "competency_display_name": {}
        }
    }
}

结果是

{
   "took": 8,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 1,
      "max_score": 1,
      "hits": [
         {
            "_index": "competency_auto_suggest",
            "_type": "competency",
            "_id": "4",
            "_score": 1,
            "_source": {
               "review": null,
               "competency_title": "Software Development",
               "id": 4,
               "competency_display_name": "Software Development"
            },
            "highlight": {
               "competency_display_name": [
                  "<b>Software Development</b>"
               ]
            }
         }
      ]
   }
}

映射

"competency":{
    "properties": {
        "competency_display_name":{
            "type":"string",
            "index_analyzer": "index_ngram_analyzer",
            "search_analyzer": "search_term_analyzer"
        }
    }
}

设定

"analysis": {
    "filter": {
        "ngram_tokenizer": {
            "type": "nGram",
            "min_gram": "1",
            "max_gram": "15",
            "token_chars": [ "letter", "digit" ]
        }
    },
    "analyzer": {
        "index_ngram_analyzer": {
            "type": "custom",
            "tokenizer": "keyword",
            "filter": [ "ngram_tokenizer", "lowercase" ]
        },
        "search_term_analyzer": {
            "type": "custom",
            "tokenizer": "keyword",
            "filter": "lowercase" 
        }
    }
}

如何突出显示软件而不是软件开发。


问题答案:

在这种情况下,应使用ngram标记器而不是ngram过滤器突出显示。 with_positions_offsets需要帮助更快地突出显示。

这是可行的设置和映射:

"analysis": {
    "tokenizer": {
        "ngram_tokenizer": {
            "type": "nGram",
            "min_gram": "1",
            "max_gram": "15",
            "token_chars": [ "letter", "digit" ]
        }
    },
    "analyzer": {
        "index_ngram_analyzer": {
            "type": "custom",
            "tokenizer": "ngram_tokenizer",
            "filter": [ "lowercase" ]
        },
        "search_term_analyzer": {
            "type": "custom",
            "tokenizer": "keyword",
            "filter": "lowercase" 
        }
    }
}

映射

"competency":{
    "properties": {
        "competency_display_name":{
            "type":"string",
            "index_analyzer": "index_ngram_analyzer",
            "search_analyzer": "search_term_analyzer",
            "term_vector":"with_positions_offsets" 
        }
    }
}


 类似资料:
  • 问题内容: 我必须强调一个单词中所有出现的单词JEditorPane。为此,我使用以下代码: 但是,如何给出单词索引的位置呢? 我正在从文件中读取内容,但是它也在读取HTML标签,并且正在干扰单词索引。 问题答案: 基本上,您应该能够遍历文档以寻找所需的匹配项 … 这将遍历整个文档并突出显示所有匹配项。这也是区分大小写的匹配;)

  • 问题内容: 如何获得Elastic Search仅突出显示导致文档退回的单词? 我有以下索引 假设我已建立索引: 核能是利用核反应释放核能[5]来产生热量,然后最频繁地将其用于汽轮机中以在核电站中发电。该术语包括核裂变,核衰变和核聚变。目前,周期表the系元素的元素的核裂变在人类直接服务中产生了绝大多数核能,其核衰变过程主要以地热能和放射性同位素热电发生器的形式出现在利基用途中。弥补其余的。 并搜

  • 问题内容: 我基本上需要突出显示文本块中的特定单词。例如,假装我想在文本中突出显示“ dolor”一词: 我如何将以上内容转换为如下形式: jQuery有可能吗? 编辑 :正如塞巴斯蒂安指出的那样,如果没有jQuery,这是完全有可能的但我希望可以有一种特殊的jQuery方法,该方法可以让您对文本本身进行选择。我已经在该站点上大量使用了jQuery,因此将所有内容都包裹在jQuery中可能会使事情

  • 我是RichTextFX新手,需要一些帮助。我想使用StyleClassedTextArea(见https://github.com/FXMisc/RichTextFX)。 我的简单java代码: 但是,如图所示,没有突出显示任何内容。有人知道我如何用红色(或我做错了什么)渲染一定范围内的文本吗?

  • 问题内容: 我想建立一个样本,以从与我的应用程序过滤器匹配的单词中删除突出显示的内容。因此,我将自己基于以下示例: 此示例的作用是删除文本区域的所有突出显示。例如,如果我选择了三个单词,并且取消选中其中一个,则所有过滤器都将被删除,而我只想删除未选中单词的突出显示。是否有一种简单的方法来检查哪个单词与过滤器匹配?还是我需要手动进行?直到现在,我发现我的研究没有成功 提前致谢 最后编辑: 基于@ca

  • 问题内容: 在任何人建议使用HTML之前,我都会在后面解释为什么这不是一种选择。我有一个表,其中包含带有文本单元格的列。我需要能够突出显示每个单元格中的一些文本。因此,例如,如果该单元格包含“ cat foo dog”,我可能要突出显示foo。 我当前的方法是使用一个自定义TableCellRenderer,它将html放入要呈现的JLabel组件中,并且效果很好。然后我注意到,当单元格中的文本变