在弹性搜索中使用多个分析器。(自动完成和语音)

问题描述 投票:0回答:1

分析算法在模糊匹配自动完成方面表现良好,但模糊匹配不太好,所以我想将语音分析器添加到相同的名字索引中。我浏览了很多文档,但没有找到关于如何使用 2 分析仪的好文档。

  "settings": {
    "analysis": {
      "analyzer": {
        "autocomplete_analyzer": {
          "type": "custom",
          "tokenizer": "autocomplete_tokenizer",
          "filter": [
            "lowercase"
          ]
        },
        "phonetic_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "phonetic"
          ]
        }
      },
      "tokenizer": {
        "autocomplete_tokenizer": {
          "type": "edge_ngram",
          "min_gram": 2,
          "max_gram": 10,
          "token_chars": ["letter", "digit"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "full_name": {
        "type": "text",
        "analyzer": "autocomplete_analyzer"
      },
      "relation_name": {
        "type": "text",
      },
      "address": {
        "type": "text"
      }
    }
  }
}
django elasticsearch search elastic-stack spring-data-elasticsearch
1个回答
0
投票

棘手的答案...

虽然不可能对单个字段使用多个分析器(除非您可以在

index
search
时使用不同的分析器),但一个棘手的方法是使用 elasticsearch 中的
copy_to
功能。

因此您可以添加另一个字段,例如

full_name_phonetic
如下所示,在搜索时,在两个字段上查询。

{
"mappings": {
    "properties": {
      "full_name_phonetic": {
        "type": "text",
        "analyzer": "phonetic_analyzer"
      },
      "full_name": {
        "type": "text",
        "copy_to": "full_name_phonetic"
        "analyzer": "autocomplete_analyzer"
      },
      "relation_name": {
        "type": "text",
      },
      "address": {
        "type": "text"
      }
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.