0

运行弹性版本 1.6

我正在尝试为我在 elasticsearch 中的索引设置自定义分析器。我的索引 / 有一些属性,其中包含一些重音和特殊字符。

就像我的一个属性名称具有这样的值,"name" => "Está loca"。所以我想要实现的是,每当我尝试通过这种方式搜索时, http://localhost:9200/tutorial/helloworld/_search?q=esta

我应该得到"Está loca"的结果。我已经浏览了以下链接并配置了必要的分析器,该分析器在链接中进行了说明。 https://www.elastic.co/guide/en/elasticsearch/guide/current/asciifolding-token-filter.html

curl -XPUT 'localhost:9200/tutorial?pretty' -H 'Content-Type: application/json' -d'
{
"mappings":{
  "helloworld":{
  "properties": {
    "name": { 
      "type":           "string",
      "analyzer":       "standard",
      "fields": {
        "folded": { 
          "type":       "string",
          "analyzer":   "folding"
        }
      }
    }
  }
}
},
"settings": {
    "analysis": {
      "analyzer": {
        "folding": {
          "tokenizer": "standard",
          "filter":  [ "lowercase", "asciifolding" ]
        }
      }
    }
  }
}'

我在创建索引时进行了配置,并制作了一些这样的条目进行测试,

curl -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "name": "Está loca!" }'
curl -X POST 'http://localhost:9200/tutorial/helloworld/2' -d '{ "name": "Está locá!" }'

但是在像这样搜索时, http://localhost:9200/tutorial/helloworld/_search?q=esta 什么也没发生。我只希望每当用户以任何语言(例如英语)搜索时,它都应该得到相同的结果。请任何人都可以提供帮助,我如何才能在过去 1 周内实现这一目标。

4

2 回答 2

1

您将无法在字段中搜索esta关键字。_all默认情况下,elasticsearch 仅在构建_all field时应用标准分析器。

所以你的以下查询

GET folding_index1/helloworld/_search?q=esta

在弹性 dsl 中生成以下匹配查询。

GET folding_index1/helloworld/_search
{
  "query": {
    "match": {
      "_all": "esta"
    }
  }
}

哪个_all字段搜索,因此找不到名称的折叠标记。

您可以执行以下操作,但即使include_in_all提到了多字段,它仍然对 _all 字段应用标准分析器。

PUT folding_index1
{
    "mappings": {
        "helloworld": {
            "properties": {
                "name": {
                    "type": "string",
                    "analyzer": "standard",
                    "fields": {
                        "folded": {
                            "type": "string",
                            "analyzer": "folding",
                            "include_in_all": true
                        }
                    }
                }
            }
        }
    },
    "settings": {
        "analysis": {
            "analyzer": {
                "folding": {
                    "tokenizer": "standard",
                    "filter": ["lowercase", "asciifolding"]
                }
            }
        }
    }
}

像下面这样的查询可以为你工作。有关_all 字段分析器的更多信息

POST folding_index1/_search?q=name.folded:esta
于 2017-06-29T06:59:37.943 回答
0

这个链接也帮了我很多,为我的场景提供了精确的分析器。

https://vanwilgenburg.wordpress.com/2013/08/03/diacritics-in-elasticsearch/

于 2017-06-29T12:22:03.050 回答