首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在elasticsearch中实现区分大小写的搜索?

如何在elasticsearch中实现区分大小写的搜索?
EN

Stack Overflow用户
提问于 2015-05-22 06:08:50
回答 4查看 17.6K关注 0票数 14

我在我的索引文档中有一个字段,我需要在其中搜索大小写敏感。我使用匹配查询来获取结果。我的数据文档的一个例子是:

代码语言:javascript
复制
{
  "name" : "binoy",
  "age" : 26,
  "country": "India"
}

现在,当我提出以下查询时:

代码语言:javascript
复制
{
  “query” : {
    “match” : {
      “name” : “Binoy"
    }
  }
}

这给了我“比诺伊”和“比诺伊”的匹配。我希望搜索能区分大小写。在默认情况下,elasticsearch似乎对大小写不敏感。如何在elasticsearch中使搜索区分大小写?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-06-23 02:26:41

在映射中,可以将字段定义为not_analyzed。

代码语言:javascript
复制
curl -X PUT "http://localhost:9200/sample" -d '{
  "index": {
    "number_of_shards": 1,
    "number_of_replicas": 1
  }
}'

echo
curl -X PUT "http://localhost:9200/sample/data/_mapping" -d '{
  "data": {
    "properties": {
      "name": {
        "type": "string",
        "index": "not_analyzed"
      }
    }
  }
}'

现在,如果您可以做普通索引和正常搜索,它将不会分析它,并确保它提供不区分大小写的搜索。

票数 8
EN

Stack Overflow用户

发布于 2015-05-22 06:47:26

这取决于您为字段name定义的映射。如果您没有定义任何映射,那么elasticsearch将将其视为字符串,并使用标准分析器 (更低的情况下是令牌)来生成令牌。您的查询还将使用相同的分析器进行搜索,因此匹配是通过小写输入完成的。这就是为什么"Binoy“和"binoy”匹配的原因。

要解决这个问题,您可以在不使用lowercase过滤器的情况下定义一个自定义分析器,并将其用于您的字段name。您可以定义分析器如下

代码语言:javascript
复制
"analyzer": {
                "casesensitive_text": {
                    "type":         "custom",
                    "tokenizer":    "standard",
                    "filter": ["stop", "porter_stem" ]
                }
            }

您可以定义name的映射如下

代码语言:javascript
复制
"name": {
    "type": "string", 
    "analyzer": "casesensitive_text"
}

现在您可以在name上进行搜索。

注意:例如,上面的分析器就是目的。你可能需要根据你的需要来改变它。

票数 6
EN

Stack Overflow用户

发布于 2015-05-22 06:46:48

让你的地图像:

代码语言:javascript
复制
PUT /whatever
{
  "settings": {
    "analysis": {
      "analyzer": {
        "mine": {
          "type": "custom",
          "tokenizer": "standard"
        }
      }
    }
  },
  "mappings": {
    "type": {
      "properties": {
        "name": {
          "type": "string",
          "analyzer": "mine"
        }
      }
    }
  }
}

意思是,该自定义分析器没有lowercase过滤器。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30389495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档