gpt4 book ai didi

elasticsearch - Elasticsearch:查询时自定义分析器

转载 作者:行者123 更新时间:2023-12-03 01:28:36 28 4
gpt4 key购买 nike

我正在尝试在查询时间提供分析器,但无法使用。

  • 创建索引

  • PUT customer


  • 关闭索引,然后使用分析仪配置和打开索引
  • 更新索引设置

    PUT customer_new/_settings


    {
    "settings": {
    "analysis": {
    "analyzer": {
    "my_analyzer": {
    "tokenizer": "my_tokenizer"
    }
    },
    "tokenizer": {
    "my_tokenizer": {
    "type": "ngram",
    "min_gram": 3,
    "max_gram": 3,
    "token_chars": [
    "digit"
    ]
    }
    }
    }
    }
    }
  • 查询数据

  • GET customer/_search


    {
    "query": {
    "match": {
    "phonenumber": { "query":"678",
    "analyzer": "my_analyzer"
    }
    }
    }
    }

    但这不会返回任何结果。
  • 关于解释查询

  • POST customer/_validate/query?explain


    {
    "query": {
    "match": {
    "phonenumber": { "query":"678",
    "analyzer": "my_analyzer"
    }
    }
    }
    }

    {
    "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
    },
    "valid": true,
    "explanations": [
    {
    "index": "customer",
    "valid": true,
    "explanation": "phonenumber:678"
    }
    ]
    }

    我更新索引的原因是索引已经到位。我想做的是,我可以通过不同的方式在字段上进行搜索,因此我想动态添加分析仪,然后在查询时使用它们。

    我认为如果我重新索引并通过更新映射在电话号码字段中配置了此分析器,那么它将起作用。但是就像我上面提到的,我不想重新索引,因为有数百万条记录,而且频繁地重新索引不是一种选择。

    有办法解决吗?

    最佳答案

    简短答案:您将需要重新索引文档

    当您在查询中指定分析器时,查询中的文本将使用此分析器,而不是文档中的字段。

    例如,如果您使用默认分析器为“Hello”建立索引,并使用不带小写字母的分析器搜索“Hello”,则不会获得结果,因为您将尝试将“Hello”与“hello”(即小写)进行匹配。

    适用于新映射的唯一解决方案是重新索引文档。您不能仅对映射更改的字段重新编制索引。

    它可能不是您正在寻找的解决方案,但是这里有一些提示可以解决此问题:

  • 如果您使用ngram分析器在术语内搜索,则可以将wildcard query*<SEARCH_TERM>*一起使用。 234将与12345匹配。您无需创建新的分析器,因为您只需更改查询即可。请注意,它将带来重要的查询开销。
  • 无需重新索引整个索引,只需创建文档的子集即可。这可以通过 _reindex 端点轻松完成。仅使用此子集来测试和改进映射,对结果满意后,请重新索引所有文档。
  • 如果尚未使用它们,请使用 alias 使该应用程序的重新编制索引透明。
  • 关于elasticsearch - Elasticsearch:查询时自定义分析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57222037/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com