Elasticsearch 未分析且小写
Elasticsearch not analyzed and lowercase
我正在尝试将字段设为小写且未在 Elasticsearch 5+ 中进行分析,以便搜索带有小写空格的字符串(它们以混合大小写形式编入索引)
在 Elasticsearch v5 之前,我们可以使用像这样的分析器来完成它:
"settings":{
"index":{
"analysis":{
"analyzer":{
"analyzer_keyword":{
"tokenizer":"keyword",
"filter":"lowercase"
}
}
}
}
}
不过,这现在对我不起作用。我认为问题在于 "string" 已被弃用并自动转换为关键字或文本。
这里有人知道如何做到这一点吗?我考虑过在我的映射中添加一个 "fields" 标签:
"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 5+ 中进行分析,以便搜索带有小写空格的字符串(它们以混合大小写形式编入索引)
在 Elasticsearch v5 之前,我们可以使用像这样的分析器来完成它:
"settings":{
"index":{
"analysis":{
"analyzer":{
"analyzer_keyword":{
"tokenizer":"keyword",
"filter":"lowercase"
}
}
}
}
}
不过,这现在对我不起作用。我认为问题在于 "string" 已被弃用并自动转换为关键字或文本。
这里有人知道如何做到这一点吗?我考虑过在我的映射中添加一个 "fields" 标签:
"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"
}
}
}
}
}