我正在尝试将字段设置为小写,而不是在 Elasticsearch 5+ 中进行分析,以便搜索带有小写空格的字符串(它们以混合大小写形式编入索引)
在 Elasticsearch v5 之前,我们可以使用这样的分析器来完成它:

  "settings":{
     "index":{
        "analysis":{
           "analyzer":{
              "analyzer_keyword":{
                 "tokenizer":"keyword",
                 "filter":"lowercase"
              }
           }
        }
     }
  }

然而,这现在对我不起作用。而且我认为问题在于“字符串”已被弃用并自动转换为关键字或文本。
这里有人知道如何做到这一点吗?我想过在我的映射中添加一个“字段”标签:
  "fields": {
    "lowercase": {
      "type": "string"
       **somehow convert to lowercase**
    }
  }

这将使使用它更具挑战性,我也不知道如何将其转换为小写。

您将在下面找到一个重现我的确切问题的测试设置。

创建索引:
{
  "settings":{
     "index":{
        "analysis":{
           "analyzer":{
              "analyzer_keyword":{
                 "tokenizer":"keyword",
                 "filter":"lowercase"
              }
           }
        }
     }
  },
  "mappings":{
     "test":{
        "properties":{
           "name":{
              "analyzer":"analyzer_keyword",
              "type":"string"
           }
        }
     }
  }
}

添加测试记录:
 {
    "name": "city test"
  }

应该匹配的查询:
{
    "size": 20,
    "from": 0,
    "query": {
        "bool": {
            "must": [{
                "bool": {
                    "should": [{
                        "wildcard": {
                            "name": "*city t*"
                        }
                    }]
                }
            }]
        }
    }
}

最佳答案

创建索引时,您需要确保 analysis 部分位于 settings 部分下方,而不是 settings > index 部分内,否则它将无法工作。

然后您还需要为您的字段使用 text 数据类型,而不是 string 一个。删除你的索引,这样做,它会起作用。

{
  "settings":{
        "analysis":{
           "analyzer":{
              "analyzer_keyword":{
                 "tokenizer":"keyword",
                 "filter":"lowercase"
              }
           }
        }
  },
  "mappings":{
     "test":{
        "properties":{
           "name":{
              "analyzer": "analyzer_keyword",
              "type": "text"
           }
        }
     }
  }
}

关于Elasticsearch 未分析和小写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41608994/

10-15 20:16