当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch中一个自定义分析器中的多个标记器

郑曜灿
2023-03-14

我正在使用自定义的NGRAM分析器,它有一个NGRAM标记器。我也用过小写过滤器。对于没有字符的搜索,该查询运行良好。但是当我搜索某些符号时,它失败了。由于我使用了小写标记器,Elasticsearch不分析符号。我知道空白标记器可以帮助我解决这个问题。如何在一个分析器中使用两个标记器?下面是映射:

{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer":"my_tokenizer",
          "filter":"lowercase"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "ngram",
          "min_gram": 3,
          "max_gram": 3,
          "token_chars": [
            "letter", 
            "digit"
          ]
        }
      }
    }
  },
    "mappings": {
    "_doc": {
      "properties": {
        "title": {
          "type": "text",
          "analyzer": "my_analyzer"
        }
      }
    }
  }

}

我有办法解决这个问题吗?

共有1个答案

楚俊逸
2023-03-14

根据elasticsearch的文档,

分析器必须只有一个标记器。

但是,可以在设置中定义多个分析器,并且可以为每个字段配置单独的分析器。

PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "title": {
          "type": "text",
          "analyzer": "whitespace"
          "fields": {
            "ngram": { 
              "type":  "text",
              "analyzer": "my_analyzer"
            }
          }
        }
      }
    }
  }
}
GET my_index/_search
{
  "query": {
    "multi_match": {
      "query": "search @#$ whatever",
      "fields": [ 
        "title",
        "title.ngram"
      ],
      "type": "most_fields" 
    }
  }
}
  • 创建两个索引。
  • 第一个索引具有字段title和分析器my_analyzer
  • 第二个索引有字段标题和分析器空白
  • 为它们创建相同的别名,如下所示

执行以下命令:

POST _aliases
{  
   "actions":[  
      {  
         "add":{  
            "index":"index A",
            "alias":"index"
         }
      },
      {  
         "add":{  
            "index":"index B",
            "alias":"index"
         }
      }
   ]
}

因此,当您最终编写查询时,它必须指向该别名,而该别名又将查询多个索引。

希望这能有所帮助!

 类似资料:
  • 在Elasticsearch中,我想用我的自定义分析器索引一些字段。因此,首先,我将分析器添加到其他配置中 Liferay公司- 其他索引配置 覆盖类型映射 在Liferay Elasticsearch中添加此属性后,我重置了索引,重新启动了Liferay。Portal使用我的映射和分析器正确创建了一个新索引。然后我重新索引了我的文档。当我在Elasticsearch中搜索某物时,它会显示预期的结

  • 我无法确定问题的原因,我不知道是分析器无效还是elasticsearch甚至找到了autocomplete-analyser.json文件。我该怎么解决这个?

  • 我正在用Java编写一个REST服务(在Tomcat 9上使用JAX-RS标准),我想向我的程序添加日志,以便在调用时跟踪他的工作。 因此,我使用Log4j(版本1.2.17)来编写日志,我想为在REST服务上运行的每个服务编写不同的日志文件,但我只需要为整个应用程序使用一个Log4j属性 所以我想在我的日志文件夹中保存这种日志 所以我把它写成Log4j(restServiceLogger.pro

  • 我想创建一个搜索索引,其中包含我想要以下顺序的结果的属性: 首先,所有以搜索词开头的结果 然后所有包含搜索词的结果 为此,我想使用https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-edgengram-tokenizer.html 但是我的索引设置中已经有一个标记器kuromoji_tokenizer。

  • 问题内容: 对于使用嵌套客户端的Elasticsearch非常新,我正在使用自定义分析器创建索引,但是在使用分析进行测试时,它似乎并未使用自定义分析器。主要没有Edgengram令牌出现。我缺少什么使我的自定义分析器成为索引的默认设置吗?当我使用elastichq检查映射时,它们会显示我的自定义分析器。 问题答案: 您已将自定义分析器添加到索引中,但是现在您需要将其应用到字段中。您可以在字段映射级

  • 但是它返回的标记下面。 让我知道我在代码中遗漏了什么。