处理包含特殊字符的常用术语的最佳方法是什么,如C#,C ++

时间:2017-02-28 15:14:04

标签: elasticsearch

我有一些文件包含标题中使用标准分析器的c#或c ++。 当我在标题字段上查询c#时,我得到了所有c#和C ++文档,而c ++文档甚至比c#文档得分更高。这是有道理的,因为这两个'#'和' ++'标准分析器从令牌中删除。

处理这种特殊条款的最佳方法是什么?在我的具体情况下,我希望c#文档在搜索" C#"时获得比c ++文档更高的分数。

1 个答案:

答案 0 :(得分:0)

您可以使用以下方法:

  1. 介绍copy-field,其中包含具有特殊字符的值。为此,您需要:

    • 介绍custom analyzer(此处sudo add-apt-repository ppa:mc3man/trusty-media sudo apt-get update sudo apt-get install gstreamer0.10-ffmpeg 标记符很重要 - 它会保留您的特殊字符):

      whitespace
    • 创建copy-fieldPUT my_index { "settings":{ "analysis":{ "analyzer":{ "my_analyzer":{ "type":"custom", "tokenizer":"whitespace", "filter":[ "lowercase" ] } } } } } 后缀代表特殊字符'):

      _wcc
  2. 在发出查询本身时,您会将查询与针对PUT my_index { "mappings": { "my_type": { "properties": { "prog_lang": { "type": "text", "copy_to": "prog_lang_wcc", "analyzer": "standard" }, "prog_lang_wcc": { "type": "text", "analyzer": "my_analyzer" } } } } } 字段的boost相结合(可以是多匹配或纯布尔+提升):

    prog_lang_wcc