首页 > 解决方案 > 查询带有和不带重音的单词的 Elasticsearch 索引

问题描述

我查询“café”这个词,得到 20 篇文章。然后我重复搜索“cafe”这个词,只会得到 3 篇文章。所以我正在寻找一种可能性来处理带有重音字母的单词,就像处理带有没有重音字母的单词一样。
我的问题也是,我已经有一个填充索引,所以我必须修改现有系统。我正在使用 Elasticsearch 6.5。

我找到了一些有用的信息,并完成了以下步骤:

设置折叠分析仪

curl -H "Content-Type: application/json" --user <user:pass> -XPUT http://localhost/test/_settings?pretty -d '{
  "analysis": {
    "analyzer": {
      "folding": {
        "tokenizer": "standard",
        "filter":  [ "lowercase", "asciifolding" ]
      }
    }
  }
}'

修改内容字段的现有映射

curl -H "Content-Type: application/json" --user <user:pass> -XPUT http://localhost/test/mytype/_mapping -d '{
  "properties" : {
    "content" : {
      "type" : "text",
      "fields" : {
        "folded" : {
          "type" : "text",
          "analyzer" : "folding"
        }
      }
    }
  }
}'

进行搜索

curl -H "Content-Type: application/json" --user <user:pass> -XGET http://localhost/test/_search -d '{
  "query" : {
    "bool" : {
      "must" : [
        {
          "query_string" : {
            "query" : "cafe"
          }
        }
      ]
    }
  },
  "size" : 10,
  "from" : 0
}'

但效果和之前一样:我只找到带有“cafe”的文章,没有找到带有“café”的文章。有什么我想念的吗?

标签: elasticsearch

解决方案


伟大的开始!您已经创建了一个新的分析器并更改了映射,但是,您现在还需要重新索引数据以填充新content.folded字段。

您可以通过这样的查询端点调用更新来非常轻松地做到这一点:

curl --user <user:pass> -XPOST http://localhost/test/_update_by_query

推荐阅读