【发布时间】:2017-01-12 21:34:56
【问题描述】:
我正在尝试将字段设为小写,而不是在 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*"
}
}]
}
}]
}
}
}
【问题讨论】:
-
您为什么要搜索
name字段,而映射中的字段名为title?另外,为什么不简单地将其类型声明为"type":"text"呢?最后,amsterdam t应该如何匹配city test? -
让我更新示例,我复制了错误的东西 :) 抱歉。如果我将其声明为文本,则它不适用于空格。
-
我基本上想要的是有一个像“City Test”这样的字符串并在“city test”上匹配。就是这样。
-
是的,但是如果您使用关键字/小写分析器将其声明为
text会怎样? -
它完全忽略了这一点。它仍然不会匹配空格并且表现得好像我没有放置分析器一样。