小编Dav*_*all的帖子

Elasticsearch 自定义分析器,带有 ngram,连字符上没有单词分隔符

我正在尝试索引包含连字符但不包含空格、句点或任何其他标点符号的字符串。我不想根据连字符分割单词,而是希望连字符成为索引文本的一部分。

例如,我的 6 个文本字符串是:

  • 杂志播放
  • 马杂志
  • 在线杂志
  • 最佳杂志
  • 杂志之友
  • 杂志玩游戏

我希望能够在这些字符串中搜索包含 "play" 的文本以 "magazine" 开头的文本

我已经能够使用ngram使包含“play”的文本正常工作。但是,连字符导致文本分割,并且它包含连字符后面的单词中“杂志”的结果。我只希望出现以“magazine”开头的字符串。

根据上面的示例,当以“magazine”开头时,只有这 3 个应该出现:

  • 杂志播放
  • 马杂志
  • 杂志玩游戏

请帮助我的 ElasticSearch 索引示例:

DELETE /sample

PUT /sample
{
    "settings": {
        "index.number_of_shards":5,
        "index.number_of_replicas": 0,
        "analysis": {
            "filter": {
                "nGram_filter": {
                   "type": "nGram",
                   "min_gram": 2,
                   "max_gram": 20,
                   "token_chars": [
                      "letter",
                      "digit"
                   ]
                },
                "word_delimiter_filter": {
                    "type": "word_delimiter",
                    "preserve_original": true,
                    "catenate_all" : true
                }
             },
          "analyzer": {
            "ngram_index_analyzer": {
              "type" : "custom",
              "tokenizer": "lowercase",
              "filter" …
Run Code Online (Sandbox Code Playgroud)

analysis tokenize analyzer elasticsearch

3
推荐指数
1
解决办法
2728
查看次数

标签 统计

analysis ×1

analyzer ×1

elasticsearch ×1

tokenize ×1