自定义分析器无法在elasticsearch

时间:2017-06-29 04:36:09

标签: curl elasticsearch diacritics elasticsearch-analyzers

运行弹性版本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周内实现这一目标。

2 个答案:

答案 0 :(得分:1)

您将无法在_all字段中搜索_all个关键字。由于弹性搜索默认情况下仅在构建GET folding_index1/helloworld/_search?q=esta field时使用标准分析器。

所以您的以下查询

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

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

_all

针对include_in_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

以下查询可以为您服务。更多关于_all field analyzer

sed -i 's/(\x00\x00+...\x00)/\1\n/g' filename

答案 1 :(得分:0)

此链接也对我有很大帮助,为我的方案提供了精确的分析器。

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